whilef循环中的scanf()错误处理?

时间:2014-09-16 02:17:23

标签: c

我是C编程语言的新手,我很难知道如何使用scanf()作为while循环中的条件来捕获scanf()错误。

代码如下:

while (scanf("%d", &number == 1) && other_condition)
{
   ...
}

如何判断何时未输入整数,以便打印出相关的错误消息?

3 个答案:

答案 0 :(得分:2)

听起来你正试图确定scanf()是否失败而不是其他条件。许多C开发人员接近这种方式的方法是将结果存储在变量中。值得庆幸的是,由于赋值求值为一个值,我们实际上可以将其作为循环的一部分。

int scanf_result;

/* ... */

// We do the assignment inline...
//                    |            then test the result
//                    v                       v
while (((scanf_result = scanf("%d", &number)) == 1) && other_condition) {
    /* Loop body */
}

if (scanf_result != 1) {
    /* The loop terminated because scanf() failed. */
} else {
    /* The loop terminated for some other reason. */
}

答案 1 :(得分:0)

使用这种逻辑,你无法分辨。您只会知道scanf失败或其他条件失败。

如果其他条件没有副作用且可以在scanf之前执行而不改变程序的行为,你可以写:

while ( other_condition && 1 == scanf("%d", &number) )
{
    // ...
}

if ( other_condition )
    { /* failed due to other_condition */ }
else
    { /* failed due to scanf or break */ }

或者,您可以显式存储每个scanf结果:

int result = 0;

while ( 1 == (result = scanf("%d", &number)) && other_condition ) 
{
     // ...
}

if ( 1 == result )
    { /* failed due to other_condition or break */ }
else
    { /* failed due to scanf */ }

NB。我使用尤达条件,因为在这种情况下我更喜欢这种风格,但你不必这样做。

答案 2 :(得分:-2)

我认为循环的条件应该是输入:

scanf("%d",number);
while(number==1 && other)