使用EOF(CTRL + D)重复输入的最后一行

问题描述 投票:0回答:2

当我输入我输入的值并键入ctrl + d时,最后一行重复并且不支持发生。谁知道发生了什么?

  while(1) {
        if(getchar()==EOF)
            break;
        scanf(" %c %d", &s, &b)

  }

例如,我输入(输入)m 2的图像,结果是5(输出)如果单击ctrl + d完成程序再次打印5,我不希望这样。

c scanf eof
2个回答
2
投票

输入后scanf("%c %d",&s,&b);在换行符处停止,但它不会从输入流中删除它。所以下一次调用getchar()会返回换行符,并且不会返回EOF

然后再次调用scanf(),但不检查结果。它没有任何东西可供阅读,因此它保持变量sb不变,然后再次打印。

然后你回到循环的顶部。现在getchar()返回EOF

将您的循环条件更改为:

while (scanf(" %c %d", &s, &b))

并摆脱getchar()检查。

%c之前的空间将使它跳过角色之前的任何空格。


1
投票

永远不要认为scanf成功了。检查其返回值,以确保它能够读取您期望的所有内容。

int n = scanf("%c %d",&s,&b);
if ( n != 2 )
{
   // deal with the error.
}
else
{
   // Use the data
}
© www.soinside.com 2019 - 2024. All rights reserved.