我在C ++中的程序不会停在if(scanf()==EOF)break;
上,下面是我程序的草图,例如输入:
X XjhgXjhX
给出输出:
jhgjh
即 - 它会打印除X
以外的所有字符,但不会在Ctrl+Z
上停止。
using namespace std;
int main()
{
char str[100]={0},znak,forbd;
int i=0,j=0;
while(true)
{
i=0;
j=0;
if(scanf("%c",&forbd)==EOF)
break;
if(scanf("%c",&znak)==EOF)
break;
while(znak!='\n')
{
if(forbd!=znak && znak!=' ')
{
str[i]=znak;
i++;
//cout<<i<<"\n";
}
if(scanf("%c",&znak)==EOF)
break;
}
while(j<i)
{
printf("%c",str[j]);
j++;
}
printf("%c",'\n');
}
return 0;
}
由于阅读cin
时出现问题,我不想使用\n
。
答案 0 :(得分:0)
好的,我将使用iostream
代替cstdio
代码if(cin.peek()=='\n')break;
检测行尾,这解决了问题。
答案 1 :(得分:0)
scanf从stdin reference女巫读取:
已知stdin不引用交互设备,该流是完全缓冲的。否则,它是依赖于库的,无论流是行缓冲还是默认缓冲(参见setvbuf)。
通常,stdin是行缓冲的,你需要输入'\ n'来读取。
从相关的question中,您可以找到此类型的解决方案,使用字符阅读。