Giải thích hàm getchar trong ngôn ngữ C

Chào mọi người hiện tại em đang học ngôn ngữ lập trình C và em gặp vấn đề thế này, trong diễn đàn có ai pro thì giúp em với nhé.

Đoạn mã đầu tiên:

# include "stdio.h"

int main()
{
	int c;
	c = getchar();
	putchar(c);
	_getch();
}

Đoạn mã thứ hai:

**#include "stdio.h"**

int main()
{
	int c;
	c = getchar();
	while (c != EOF) {
		putchar(c);
		c = getchar();
	}
	_getch();
}

Vấn đề là lúc em chạy cái đoạn mã thứ nhất thì nó chỉ in ra kí tự đầu tiên của một chuỗi điều này em biết rồi
Nhưng đoạn mã thứ hai nếu nhập một chuỗi thì nó in luôn cả chuỗi đó

Có thể giải thích cho em tại sao lại như vậy không và cái chỗ c!= EOF là sao ạ

1 Like

Em nói thêm tí
Ý của em muốn hỏi là đáng lẽ ra nó chỉ in ra cái chữ đầu tiên thôi tại sao nó lại in cả một cái string ban đầu

int getchar ( void );Get character from stdin
Returns the next character from the standard input (stdin).

Hàm này sẽ trả về cho bạn cái ký tự bạn nhập từ bàn phím. Nếu
bạn nhập 1 chỗi rồi ấn enter thì nó sẽ trả về cho bạn ký tự đầu tiên. (Nói là đầu tiên cũng chẳng đúng. Vì thằng getchar này nó lấy dữ liệu ở thằng stdin. Nên nó sẽ in ra ký tự đầu tiên trong stdin Theo ý mình hiểu thì là như thế).

while (c != EOF) {
		putchar(c);
	c = getchar();

  }

Đoạn code này có nghĩa là khi bạn nhập từ bàn phím mà không có ký tự EOF (End of line. Trên windows cái này là CTRL + Z ) thì nó sẽ tiệp tục chạy code trong vòng while.

Như đoạn đầu mình có nói getchar() sẽ Returns the next character from the standard input (stdin).

Nên khi bạn nhập vào 1 chỗi ví dụ “ABCD” rồi án enter. Thì đầu tiên c = “A” rồi nó so sánh với EOF. Không phải thì nó sẽ in “A” ra màn hình. Tiệp theo lại thực hiện getchar() thì lần này c = “B” (Vì khi bạn nhập bàn phím thì các ký tự sẽ được lưu trong bộ nhớ đệm stdin và hàm getchar() nó sẽ lấy các ký tự ở thằng stdin này) cứ tiếp tục như thế đến khi hết chuỗi thì nó sẽ in ra màn hình đủ chuỗi mà bạn nhập.

8 Likes

Cám ơn anh Nam hôm qua em loay hoay mãi giờ thì OK rồi. :grinning::grin::grinning:

2 Likes

Thanks a Nam nha. E tìm mãi sáng tới giờ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?