我是C编程语言的新手,我很难知道如何使用scanf()作为while循环中的条件来捕获scanf()错误。
代码如下:
while (scanf("%d", &number == 1) && other_condition)
{
...
}
如何判断何时未输入整数,以便打印出相关的错误消息?
答案 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)