none
C语言的一个小问题 RRS feed

  • 问题

  • 关于下面这段代码 根据输入的字符数打印

    比如我在控制台编译这个程序 输入: os + 回车

    会打印出
    1
    1
    1

    然后光标又停在那等待输入了 。。 按照我的理解 它在打印完上面三个1以后 应该打印一个 EOF 0 (这一句printf("EOF %d\n",c);)才对

    但是问题就是 它并没有打印出 EOF 0  而是继续停在那等待我下一次输入 这个是为什么?

    不是说while(c = getchar()!=EOF)  的getchar()!=EOF判断为FALSE的时候就跳出循环了么?

    还请知道的朋友赐教 谢谢!

    -------------
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
     
      int c;
      while(c = getchar()!=EOF) {
                  printf("%d\n",c);
                  }
         printf("EOF %d\n",c);

      system("PAUSE"); 
      return 0;
    }
    --------------------

    2009年11月28日 6:51

答案

  • EOF是End of file 的缩写,在windows的控制台和Dos下Ctrl+Z是EOF的操作。换行并不是EOF
    如果你想用换行来跳出循环,改为while(c = getchar()!='\n')

    麻烦把正确答案设为解答。
    • 已标记为答案 magic_os 2009年11月30日 7:19
    2009年11月30日 1:10
    版主
  • 你想在遇到EOF时退出,可是你输入的os+回车,里面不包含EOF,所以不能跳出循环,程序还在等待你的下次输入。
    • 已标记为答案 magic_os 2009年11月30日 7:19
    2009年11月30日 1:17

全部回复

  • while 语句里面的条件表达式 (c = getchar() != EOF) 应该改为((c = getchar()) != EOF) 。
    2009年11月29日 6:39
  • 首先谢谢你的回答- -问题是我是故意那样设置的 我就是在测试返回文件结束符的情况
    2009年11月29日 8:10
  • EOF是End of file 的缩写,在windows的控制台和Dos下Ctrl+Z是EOF的操作。换行并不是EOF
    如果你想用换行来跳出循环,改为while(c = getchar()!='\n')

    麻烦把正确答案设为解答。
    • 已标记为答案 magic_os 2009年11月30日 7:19
    2009年11月30日 1:10
    版主
  • 你想在遇到EOF时退出,可是你输入的os+回车,里面不包含EOF,所以不能跳出循环,程序还在等待你的下次输入。
    • 已标记为答案 magic_os 2009年11月30日 7:19
    2009年11月30日 1:17
  • 非常感谢上面二位朋友 ~~!问题解决
    2009年11月30日 7:20