#include <stdio.h>
main(void) {
char ch;
while (1) {
if ((ch = getchar()) != EOF)
{
break;
}
putchar(ch);
}
return 0;
}
我该如何跳出这个while
循环?我尝试使用EOF,但它并没有起作用。
#include <stdio.h>
main(void) {
char ch;
while (1) {
if ((ch = getchar()) != EOF)
{
break;
}
putchar(ch);
}
return 0;
}
我该如何跳出这个while
循环?我尝试使用EOF,但它并没有起作用。
int ch;
因为EOF
无法放在一个char
中。
另外:
if ((ch=getchar()) == EOF)
break;
你的逻辑是反过来的。
This:
char ch;
有问题,EOF
不能放在一个char
中。 getchar()
返回值的类型是int
,因此代码应该改成:
int ch;
ch
不是EOF
时循环,因此您可以将其放入while
中:while((ch = getchar()) != EOF)
使用while循环进行检查,这样更简单。
while((ch=getchar())!= EOF) {
putchar(ch);
}
EOF指示文件的结束。如果你正在从标准输入读取字符,你可以通过输入以下内容来停止while循环:
EOF
= CTRL + D(对于Linux)
EOF
= CTRL + Z(对于Windows)
你也可以使用Escape
字符或\n
字符进行检查。
示例
while((ch=getchar()) != 0x1b) { // 0x1b is the ascii of ESC
putchar(ch);
}
(ch=getchar()) != '\n'
,只需输入换行符(ENTER),while循环就会终止。 - MOHAMED(ch=getchar())!= EOF
, 您可以通过输入 CTRL+D
(适用于Linux)或 CTRL+Z
(适用于Windows)来停止这个while循环。 - MOHAMED
getchar()
返回的是int
,而不是char
。变量ch
应该声明为int
。这个问题实际上相当重要。 - FatalErrorgetchar
返回一个int
,如果你将其返回值赋给一个char
,你可能会 a) 将EOF
转换为一个不会被转换回EOF
进行比较的值,或者 b) 将有效的char
转换为EOF
进行比较。ch
应该是一个int
。 - Daniel Fischer