使用 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()
,但不检查结果。没有任何内容可供它读取,因此它保留变量 s
和 b
不变,然后您再次打印它。
然后你 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
}
当我输入输入值并键入 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()
,但不检查结果。没有任何内容可供它读取,因此它保留变量 s
和 b
不变,然后您再次打印它。
然后你 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
}