如果我输入abc
作为文字流,getchar()
会将其读取,putchar
会将其打印出来。我使用printf
语句来追踪到底发生了什么。但是在打印输入文本流的字符后,我得到一个奇怪的输出。它再次输入while
循环并执行这两个printf
语句,即i
为4
时。这是否将我的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++;
}
}
答案 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);