如何退出while循环?

4
#include <stdio.h>
main(void) {
   char ch;
   while (1) {   
      if ((ch = getchar()) != EOF) 
      {
         break;
      }
      putchar(ch);
   }
   return 0;
}

我该如何跳出这个while循环?我尝试使用EOF,但它并没有起作用。


6
getchar() 返回的是 int,而不是 char。变量 ch 应该声明为 int。这个问题实际上相当重要。 - FatalError
1
getchar 返回一个 int,如果你将其返回值赋给一个 char,你可能会 a) 将 EOF 转换为一个不会被转换回 EOF 进行比较的值,或者 b) 将有效的 char 转换为 EOF 进行比较。ch 应该是一个 int - Daniel Fischer
3个回答

7
我想你的意思是:
int ch;

因为EOF无法放在一个char中。

另外:

if ((ch=getchar()) == EOF)
       break;

你的逻辑是反过来的。


3

This:

char ch;

有问题,EOF不能放在一个char中。 getchar() 返回值的类型是int,因此代码应该改成:

int ch;

此外,正如指出的那样,您的逻辑是错误的。它在ch不是EOF时循环,因此您可以将其放入while中:
while((ch = getchar()) != EOF)

非常感谢您的回答。您能回答一下这个问题吗?当while条件为false时会发生什么? - kd11

2

使用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);
}

非常感谢您的回答。是的,这很容易,但如何退出while循环呢?我需要输入什么来在while条件中得到false。 - kd11
很抱歉,我仍然无法在while循环中得到false条件。 - kd11
当您想要完成输入字符时,只需输入 Escape 字符,然后按 Enter 键。 - MOHAMED
如果你将检查条件改为(ch=getchar()) != '\n',只需输入换行符(ENTER),while循环就会终止。 - MOHAMED
如果您使用(ch=getchar())!= EOF, 您可以通过输入 CTRL+D(适用于Linux)或 CTRL+Z(适用于Windows)来停止这个while循环。 - MOHAMED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接