当我输入我输入的值并键入ctrl + d时,最后一行重复并且不支持发生。谁知道发生了什么?
while(1) {
if(getchar()==EOF)
break;
scanf(" %c %d", &s, &b)
}
例如,我输入(输入)m 2的图像,结果是5(输出)如果单击ctrl + d完成程序再次打印5,我不希望这样。
输入后scanf("%c %d",&s,&b);
在换行符处停止,但它不会从输入流中删除它。所以下一次调用getchar()
会返回换行符,并且不会返回EOF
。
然后再次调用scanf()
,但不检查结果。它没有任何东西可供阅读,因此它保持变量s
和b
不变,然后再次打印。
然后你回到循环的顶部。现在getchar()
返回EOF
。
将您的循环条件更改为:
while (scanf(" %c %d", &s, &b))
并摆脱getchar()
检查。
在%c
之前的空间将使它跳过角色之前的任何空格。
永远不要认为scanf
成功了。检查其返回值,以确保它能够读取您期望的所有内容。
int n = scanf("%c %d",&s,&b);
if ( n != 2 )
{
// deal with the error.
}
else
{
// Use the data
}