Scanf未在C中执行[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scanf未在C中执行[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我的代码在执行printf后跳过scanf。我已经尝试了fflush(stdin)清除缓冲区中的任何输入而无济于事。这是一段代码。 printf(“按Enter继续: n”);
printf("Do you want to perform another operation? Y or N
");
scanf("%c", &run_operation);
if (run_operation != 'y' || run_operation != 'Y') {
break;
}
代码有什么问题?
答案
fflush(stdin)
是未定义的行为。
来自7.21.5.2
如果流指向输入流或未输入最近操作的更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件;否则,行为未定义。
并且scanf
从stdin
获得输入可能是
中的前一个输入stdin
。
scanf(" %c",&run_operation);
^^^
Ensures that whitespace are consumed.
这样可以解决问题。
另外只是检查它是否立即进入printf
不是检查scanf
成功的方法。检查scanf
的返回值。
在这种情况下,你这样做: -
if( scanf(" %c",&run_operation) == 1){
printf("%s[%c]
","scanf is successful with the character",run_operation);
}
要了解为什么scanf
的空间解决了这个问题: -
由白色空格字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。该指令永远不会失败。
以上是关于Scanf未在C中执行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult 未在 Android API 23 的片段上调用