即使scanf中的输入值不等于1,为什么printf函数会打印值输入

时间:2017-10-06 07:54:27

标签: c scanf

我不明白为什么条件不反映结果。我按条件指定输入不等于1的值,但仍然打印。有人可以向我解释为什么会这样。

#include<stdio.h>

int main() {
int n; 
while ( scanf( "%d", &n) == 1 )
   printf("%d\n",n);
return 0;
}

3 个答案:

答案 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;
}