Hỏi về lệnh getchar

Mình chưa hiểu lệnh getchar() trong đoạn code này lắm! Lệnh getchar() để nhận giá trị từ bàn phím, nhưng trong đoạn code này lệnh getchar() nhận giá
trị từ bàn phím rồi lưu vào biến nào vậy?
Mình cũng thử bằng Eclipse rồi nhưng mà sao nó ko chạy! Toàn nhận giá trị từ bàn phím ko!

Đây là đoạn code trong sach The C program language

#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld
", nc);

Chạy > Nhập gì đó > Enter > Bấm tổ hợp phím “ctrl + z” > Enter phát nữa :smiley:

[QUOTE=10520541;170231]Chạy > Nhập gì đó > Enter > Bấm tổ hợp phím “ctrl + z” > Enter phát nữa :D[/QUOTE]
Cũng vậy thôi bạn ơi!

[QUOTE=i0988305410;170240]Cũng vậy thôi bạn ơi![/QUOTE]
Bạn xem lại IDE của mình xem sao nhé! Làm theo cách của bạn Trung là đúng rồi đó. Nhấn Ctrl + Z để thoát khỏi vòng lặp, dừng việc nhập.

getchar() : 1 marcro trả về giá trị sau khi thực hiện phép gán vào getchar() lấy từ bộ nhớ đệm và kết thúc bằng ’
’ ( enter ) , nghĩa là trả về ký tự hoặc những kí tự ( xâu ) sau khi nhập từ bán phím và kết thúc việc nhập bằng Enter
Nên while(getchar()!=EOF) là khi mà những kí tự trả về đó chưa phải là End-Of-File ( EOF ) thì vòng lặp vẫn tiếp tục , mà End-Of-File trong soạn thảo có text là Ctrl-Z ( win32) :smiley:

[QUOTE=i0988305410;170240]Cũng vậy thôi bạn ơi![/QUOTE]

Thử lại với “ctrl + d” nha tưởng dùng windows :sogood:

[QUOTE=10520541;170247]Thử lại với “ctrl + d” nha tưởng dùng windows :sogood:[/QUOTE]
Vẫn vậy thôi bạn à! Vẫn ko thoát được lệnh while

[QUOTE=i0988305410;170342]Vẫn vậy thôi bạn à! Vẫn ko thoát được lệnh while[/QUOTE]
crtl + C xem bạn, không dùng eclipse bao giờ :slight_smile:

[QUOTE=10520058;170347]crtl + C xem bạn, không dùng eclipse bao giờ :-)[/QUOTE]
Vẫn không đc bạn à! Tại mình định mò từ từ C/C+±>Java->Android nên mới dùng Eclipse đó bạn à!
Theo bạn thì trong Ubuntu tốt nhất là dùng IDE gì?
Cảm ơn nha!

Theo bài này thì chỉ co ctrl + d/z (Post #2)
http://cboard.cprogramming.com/c-programming/120861-while-c-%3D-getchar-%3D-eof-cntrl-z.html

Tham khảo link này xem.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=159803

[QUOTE=i0988305410;170371]Vẫn không đc bạn à! Tại mình định mò từ từ C/C+±>Java->Android nên mới dùng Eclipse đó bạn à!
Theo bạn thì trong Ubuntu tốt nhất là dùng IDE gì?
Cảm ơn nha![/QUOTE]
theo mình thì bạn thích gì dùng đó, đầu tiên mình gợi ý thôi. Bạn tiếp xúc nhiều sẽ thấy cái nào hợp :slight_smile:

  • Ngôn ngưc khác nhau thì dùng cái khác nhau :
  • C/C++ :Codeblock so good
  • Java/Android: eclipse/netbean.

Nhưng để bắt đầu khuyên bạn nên dùng text editor như Vim/Nano/gedit/Kate,… để rèn khả năng lập trình cho vững và chạy bằng dòng lệnh debug. Việc này bạn sẽ thấy nhàm chán nhưng sẽ tốt cho việc xem xét lỗi sau này :slight_smile:

Mình làm bằng gedit thì chạy được rồi, cảm ơn mọi người!

Cho mình hỏi thêm là sao phải gán c=getchar(). getchar() là để nhận kí tự từ bàn phím mà, chỉ cần mình
while(getchar() != EOF)
putchar();

là được rồi.
À, mình cũng thử bằng gedit rồi, nó báo là: IO.c:10:1: error: too few arguments to function ‘putchar’
Mình chưa rõ chỗ này lắm, mong giải thích cặn kẽ! Cảm ơn mọi người

[QUOTE=i0988305410;171534]Cho mình hỏi thêm là sao phải gán c=getchar(). getchar() là để nhận kí tự từ bàn phím mà, chỉ cần mình
while(getchar() != EOF)
putchar();

là được rồi.
À, mình cũng thử bằng gedit rồi, nó báo là: IO.c:10:1: error: too few arguments to function ‘putchar’
Mình chưa rõ chỗ này lắm, mong giải thích cặn kẽ! Cảm ơn mọi người[/QUOTE]
http://www.cplusplus.com/reference/cstdio/putchar/