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

Repeat the last line of the input using EOF(CTRL+D)

当我输入输入值并键入 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() return 是那个换行符,而不是 return EOF.

然后您再次调用 scanf(),但不检查结果。没有任何内容可供它读取,因此它保留变量 sb 不变,然后您再次打印它。

然后你 return 到循环的顶部。现在 getchar() returns EOF.

将循环条件更改为:

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

并去掉 getchar() 检查。

%c 之前的 space 将使其跳过字符之前的任何白色 space。

永远不要假设 scanf 成功了。检查其 return 值以确保它能够读取您期望的所有内容。

int n = scanf("%c %d",&s,&b);
if ( n != 2 )
{
   // deal with the error.
}
else
{
   // Use the data
}