Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Lỗi của kiểu dữ liệu Char và cách nhập giá trị nguyên vào biến Char?

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Unhappy Lỗi của kiểu dữ liệu Char và cách nhập giá trị nguyên vào biến Char?

    Em viết code này
    Code:
    #include <stdio.h>
    //#include <conio.h>
    //#include <math.h>
    //#include <windows.h>
    #define in printf
    #define quet scanf
    #define ff fflush(stdin)
    //#define cls system("cls")
    
    int main()
    {
    	char a,b,c;
    	
    	in("Ban hay nhap vao gia tri a: ");
    	ff;
    	quet("%d", &a);
    	in("A la: %d\n", a);
    	in("Ban hay nhap vao gia tri cua b: ");
    	ff;
    	quet("%d", &b);
    	in("B la: %d\n", b);
    	in("Ban hay nhap vao gia tri cua c: ");
    	ff;
    	quet("%d", &c);
    	in("C la: %d\n", c);
    	in("A: %d\nB: %d\nC: %d\n", a,b,c);
    }
    Nó cho kết quả thế này

    Nếu em sửa thành
    Code:
    #include <stdio.h>
    //#include <conio.h>
    //#include <math.h>
    //#include <windows.h>
    #define in printf
    #define quet scanf
    #define ff fflush(stdin)
    //#define cls system("cls")
    
    int main()
    {
    	char a,b,c;
    	
    	in("Ban hay nhap vao gia tri a: ");
    	ff;
    	quet("%c", &a);
    	in("A la: %c\n", a);
    	in("Ban hay nhap vao gia tri cua b: ");
    	ff;
    	quet("%c", &b);
    	in("B la: %c\n", b);
    	in("Ban hay nhap vao gia tri cua c: ");
    	ff;
    	quet("%c", &c);
    	in("C la: %c\n", c);
    	in("A: %c\nB: %c\nC: %c\n", a,b,c);
    }
    Thu được là

    Em mới học C và nghĩ là kiểu char thì có thể lưu được số nguyên -127 --> 126 hoặc 0 --> 256 hoặc nó có thể lưu được kí tự.
    +)Em thấy lạ là cả 2 code em ko có
    Code:
    return 0;
    mà c-free nó không báo lỗi. Liệu rằng chương trình này biên dịch ra mà thiếu return 0; có tốt không ạ ? Nêu rõ tùy từng tình huống hộ em với ạ
    +)Em thắc mắc là ở code thứ nhất(1) tại sao nó lại làm cho a và b bằng 0 ??!!!!
    sự khác biệt giữa 2 code trên là ở định dạng dữ liệu, code 1 lưu số thì bị hỏng code 2 lưu kí tự thành công. Sao lại thế? Vậy em nghĩ là do mình chọn định dạng d cho kiểu char là sai. Hoặc là định dạng %d dùng được cho kiểu Char thì tại sao a và b lại bị xóa giá trị và = 0.Vậy để nhập giá trị nguyên vào biến có kiểu char thì làm thế nào ạ? Nhân tiện các anh chị cho em biết có những định dạng nào cho dữ liệu không ạ? Em đọc sách thấy chỉ có ghi
    Code:
    %c : Ký tự đơn(Char)
    %s : Chuỗi kí tự (char[], char*)
    %d : Số nguyên có dấu(int, short, long)
    %f : Số chấm động (ký hiệu thập phân) +++++> Số thực (float, double)
    %e : Số chấm động (ký hiệu có số mũ)
    %g : Số chấm động (%f hay %g)
    %u : Số nguyên không dấu (unsigned int/short/long)
    %x : Số nguyên hex không dấu
    %o : Số nguyên bát phân không dấu
    l : Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài (ví dụ %ld)
    nhưng khi em đọc tài liệu thì có chỗ họ còn có định dạng %i nữa cơ ạ. Em bối rối quá, em tự học ở nhà, lại không có sách nên rối tinh cả.. Nhờ các anh chị giải đáp hộ em với ạ. Cả núi câu hỏi mà cứ post lên mạng thì học lâu lắm, hiz.

  2. #2
    Ngày gia nhập
    12 2010
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    687

    sự khác biệt giữa 2 code trên là ở định dạng dữ liệu, code 1 lưu số thì bị hỏng code 2 lưu kí tự thành công. Sao lại thế? Vậy em nghĩ là do mình chọn định dạng d cho kiểu char là sai.
    Đúng vậy , bạn chọn định dạng sai !ụ
    lỗi của bạn là thế này :
    ở đoạn code thứ nhất bạn khai báo là kiểu char đó là kiểu kí tự và ở trong C khi bạn viết là :
    %d : cái này là định dạng của số nguyên có nghĩa là nó cho phép nhập và in số nguyên ( kiểu int )
    còn khi bạn đã khai báo kiểu char thì bạn phải viết là
    C Code:
    1. scanf ( "%c " , &a);
    2. printf("%c", a )
    thì mới đúng bạn ạ !
    Vậy để nhập giá trị nguyên vào biến có kiểu char thì làm thế nào ạ? Nhân tiện các anh chị cho em biết có những định dạng nào cho dữ liệu không a;
    cái câu này có nghĩa là nhập giá giá trị 1 , 2 , 3 .. đúng ko ?
    nếu thế thi bạn cứ nhập bình thường các giá trị của nó
    tại sao a và b lại bị xóa giá trị và = 0 như đoạn code thứ 2 ý !
    cái này thì mình chưa giải thích được , có lẽ do chuyển kiểu chăng ! :s

  3. #3
    Ngày gia nhập
    05 2011
    Nơi ở
    TP HCM
    Bài viết
    27

    Tình hình là mình không rành Cfree. Nhưng mình code trên thằng Visual Studio thì chạy ngon lành, kết quả bình thường ! Nên mình nghĩ đây là do IDE chứ không phải lỗi cú pháp !

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi fcbik58 Xem bài viết
    Cả núi câu hỏi mà cứ post lên mạng thì học lâu lắm, hiz.
    Lẽ ra định comment nhưng thấy câu này nên buồn hẳn,
    ko trả lời nữa.

    Dù sao code ko có bug đâu.
    char cũng chỉ là kiểu nguyên 1byte thôi
    ko có gì khác nhau cả
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    59

    bạn này mới tự học mà đi nhanh quá trời, đã tới dùng thư viện win rồi mà thao tác ký tự chưa vững :S mình mới học 1 tháng rưỡi mà lui tới vẫn chưa hết mấy thư viện của DOS.

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Mặc định Lỗi của kiểu dữ liệu Char và cách nhập giá trị nguyên vào biến Char?

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Lẽ ra định comment nhưng thấy câu này nên buồn hẳn,
    ko trả lời nữa.

    Dù sao code ko có bug đâu.
    char cũng chỉ là kiểu nguyên 1byte thôi
    ko có gì khác nhau cả
    đừng nói mình thế langman ui, hiz tớ nói thế là "các anh chị pro ơi, anh chị nào rảnh cho em xin yahoo, có gì thắc mắc thì cho em hỏi với". Tại ngày trước em gửi bài lên diễn đàn mà mãi không thấy ai trả lời. Hiz, tội em mà. Em nói vậy thôi chứ ai không biết học tụi này thì không nóng vội được. Tuy vậy nhưng em vẫn muốn bái sư một sư phụ nào đó học cho nhanh chứ tự học ở nhà, không có thầy dạy, tự mò mẫm thì lâu thật rồi.
    Đã được chỉnh sửa lần cuối bởi fcbik58 : 08-08-2011 lúc 11:10 AM.

  7. #7
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi maitan_10000 Xem bài viết
    bạn này mới tự học mà đi nhanh quá trời, đã tới dùng thư viện win rồi mà thao tác ký tự chưa vững :S mình mới học 1 tháng rưỡi mà lui tới vẫn chưa hết mấy thư viện của DOS.
    ukm, bạn hiểu nhầm rồi, tớ dùng c-free 5 , không có hàm clrsc(); nên lang thang thế nào tóm được cách giải quyết là dùng windows.h hoặc giả lập lại hàm clrsc(); . tớ lười nên mượn tạm để dùng thôi, chứ tớ cũng mới học mà. Tham bài tập quá nên giờ mới học xong bọn do...while, while, if else .....chứ đã học được nhiều đâu. Tớ thấy chỉ chừng đó thôi đã rất đau đầu rồi, rất nhiều bài tập. Vì tớ học pascal rồi nên làm bài tập dễ sử dụng các khái niện của nó như mảng, các kiểu dữ liệu.....trong khi học C thì đã học đến đâu. Mà bên pascal thì đúng là kiểu byte lưu được số mà.Mấy hôm trước tìm tài liệu thấy có bài " tối ưu code ", đọc thử thấy có nói cần tiết kiệm bộ nhớ nèk, máy tính thực hiện nhân chia chậm hơn cộng trừ ( tốc độ của chương trình) ......vì vậy nên tớ mới dùng char để lưu giá trị từ -127--> 126 hoặc 0 --> 256 cho tiết kiệm, hơn nữa nó cũng là kiểu dữ liệu lưu trữ được số nguyên mà. Thế mà nó bị sao ấy,xem hình thứ nhất thì thôi rồi.

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Nếu ở code 1 mà ta thay char thành int thì không có gì đáng nói tuy nhiên char thì tại sao biến a = b =0; thật là kì, theo em nghĩ, chúng đều thuộc một kiểu là lưu trữ sô nguyên mà, chỉ có điều giá trị chúng khác nhau mà thôi. Em nghĩ mãi mà không thể giải thích nổi.
    Đã được chỉnh sửa lần cuối bởi fcbik58 : 08-08-2011 lúc 01:02 PM.

  9. #9
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi mini_bestboy Xem bài viết
    Tình hình là mình không rành Cfree. Nhưng mình code trên thằng Visual Studio thì chạy ngon lành, kết quả bình thường ! Nên mình nghĩ đây là do IDE chứ không phải lỗi cú pháp !
    ukm, mình đã thử lại. Đã thành công có lẽ do IDE rồi. Thanks bạn nhiều. Thank tất cả các bạn. Giờ mình đã hiểu, tại thấy mọi người nhắc nhiều VC quá nên tớ mới tải về thử thì đúng là thế thật, kết quả chính xác.( Tuy nhiên đang dùng quen C-free nên chưa quen lắm với VC, nhưng chắc chắn tớ sẽ chuyển qua VC ) Qua đó em lại thấy mỗi IDE lại có một cái gì đó không ổn. Đầu tiên em dùng TC, có clscr(); chuyển qua C-free đùng cái không có clscr(); hiz làm em khốn đốn,tốn thời gian. Giờ qua c-free lại thêm cái ông Char này nữa. Không biết ngoài char thì trong c-free còn gì bất thường nữa không, hiz. Nếu như không vướng Char thì có lẽ tớ làm thêm vài bài nữa rồi,nếu có thêm sư phụ nữa thì càng tốt, đỡ tốn thời gian. Hiz các anh chị pro ơi, anh chị nào không quá bận rộn thì nhận em làm đệ tử với.

Các đề tài tương tự

  1. Convert char** to const char** như thế nào?
    Gửi bởi iamme22021990 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 31-05-2012, 10:27 PM
  2. Tìm SV theo tên trong DSLK đơn, lỗi invalid conversion from `char' to `const char*'
    Gửi bởi dk411 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 02-11-2011, 01:55 PM
  3. Bài tập C ham timkiem thông báo lổi:invalid conversion from `char' to `const char*'
    Gửi bởi weboys trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-05-2011, 09:45 PM
  4. Dùng biến con trỏ để nhập 1 chuỗi char trong Dev C++???
    Gửi bởi congaumap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 17-03-2011, 11:33 PM
  5. string, char, Unicode char trong VC++
    Gửi bởi TQN trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 2
    Bài viết cuối: 09-03-2010, 01:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn