我不明白为什么条件不反映结果。我按条件指定输入不等于1的值,但仍然打印。有人可以向我解释为什么会这样。
#include<stdio.h>
int main() {
int n;
while ( scanf( "%d", &n) == 1 )
printf("%d\n",n);
return 0;
}
答案 0 :(得分:1)
scanf
返回读取和分配的输入数,而不是输入本身的值。在这种特殊情况下,您只需要一个输入,因此成功时scanf
将返回1,匹配失败时返回0(即输入不以十进制数字开头),如果它看到结束则返回EOF文件或错误。
如果你想测试输入的值,你会做类似
的事情while( scanf( “%d”, &n ) == 1 && n == EXPECTED_VALUE )
{
printf( “%d”, n );
}
修改强>
实际上,更好的方法就是这样:
int n;
int itemsRead;
/**
* Read from standard input until we see an end-of-file
* indication.
*/
while( (itemsRead = scanf( "%d", &n )) != EOF )
{
/**
* If itemsRead is 0, that means we had a matching failure;
* the first non-whitespace character in the input stream was
* not a decimal digit character. scanf() doesn't remove non-
* matching characters from the input stream, so we use getchar()
* to read and discard characters until we see the next whitespace
* character.
*/
if ( itemsRead == 0 )
{
printf( "Bad input - clearing out bad characters...\n" );
while ( !isspace( getchar() ) )
// empty loop
;
}
else if ( n == EXPECTED_VALUE )
{
printf( "%d\n", n );
}
}
if ( feof( stdin ) )
{
printf( "Saw EOF on standard input\n" );
}
else
{
printf( "Error while reading from standard input\n" );
}
答案 1 :(得分:0)
我认为你没有正确地将n变量与1进行比较。 所以,如果我没有错。尝试将n与1进行比较。
int main() {
int n;
while ( scanf( "%d", &n) == 1){
if(n!=1){
break;
}
printf("%d\n",n);
}
return 0;
}
这可能是一个草率的答案,但它就是一个例子。
答案 2 :(得分:0)
问题是你没有比较输入读数n
的值,而是scanf
函数返回的值,即你输入的输入数量,在你的情况下是总是1。
更多详情:Value returned by scanf function in c
此代码适用于您的情况:
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
while(n == 1){
printf("%d\n",n);
scanf("%d", &n);
}
return 0;
}