为什么在getchar和买家的情况下会发生这种情况

时间:2014-09-09 00:53:09

标签: c

如果我输入abc作为文字流,getchar()会将其读取,putchar会将其打印出来。我使用printf语句来追踪到底发生了什么。但是在打印输入文本流的字符后,我得到一个奇怪的输出。它再次输入while循环并执行这两个printf语句,即i4时。这是否将我的Enter键作为输入。如果“是”,我也尝试使用fflush,但这又产生了另一个问题。我fflush创建getchar问题后,不会打印任何字符。为什么会发生这种情况以及如何解决?

如果我使用fflush(stdin)

会怎样?
#include <stdio.h>
main(){
   c=getchar();
   fflush(stdin);
   while(c!= EOF)
   {
     putchar(c);
     c=getchar();
    fflush(stdin);
   }
}

使用ABC时,我在控制台上编写fflush。它只是getchar()'a'并打印出来。它甚至没有得到剩余的字符。

下面是我在使用fflush之前谈论的主要程序。

#include <stdio.h>

main()
{
    int c,i=1;

    c=getchar();

    while(c!= EOF)  // while(c=getchar!=EOF) putchar(c);
    {
      printf("\n\nthis is upper %d time in loop i.e. before the putchar\n\n",i);
      putchar(c);
      printf("\n\nthis is down %d time in loop i.e. after the putchar\n\n",i);
      c=getchar();
      i++;
    }
}

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>

int main(){
    int c;

    while((c=getchar())!=EOF && c != '\n'){
        putchar(c);
    }
    return 0;
}

while((c=getchar())!=EOF){
    if(c == '\n')
        break;//exit this while-loop
    putchar(c);
}

答案 1 :(得分:0)

循环执行4次,因为按enter会导致换行显示换行符。因此,在i == 4时,您将拥有c == '\n'

你不应该fflush(stdin),这是未定义的行为。不要这样做。

而且,这不会按照你想要的方式运作:

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

比较具有比赋值更高的优先级,这意味着此代码块与:

相同
while (c = (getchar() != EOF)) putchar(c);

哪个错了。您必须使用括号为赋值赋予更高的优先级:

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