如何解决如何退出whilescanf_s ...循环?
我的Visual Studio告诉我使用scanf_s()
,现在我已经使用它了,我的while
循环将永远继续下去。假设我正在阅读行,其中每行有两个数字,并用空格分隔。插入所有数字后,我的while
就永远不会停止。如何退出循环?
int main() {
int i,j;
while (scanf_s("%d %d",&i,&j)) {
int maxLength = 0;
for (int index = i; index <= j; index++) {
int tmp = cycle(index);
if (tmp > maxLength) {
maxLength = tmp;
}
}
printf("%d %d %d\n",i,j,maxLength);
}
cout << "lol";
return 0;
}
解决方法
我的Visual Studio告诉我使用scanf_s,
可疑的建议,但在MS-land上是标准的(作为scanf
的替代项)。
现在我已经用过了 永远持续下去。
这不是scanf_s
和scanf
之间的区别。两者都返回成功转换和分配的字段数。两者都将无限期地等待输入,直到看到不匹配的数据或文件末尾。当到达文件末尾而不扫描任何字段时,两者都返回EOF
,非零。
比方说,我正在阅读各行,每行 必须用空格分隔数字。香港专业教育学院插入所有 编号我的一刻永不停止。我如何退出循环?
测试特定的预期返回值,而不是其一般真实性:
while (scanf_s("%d %d",&i,&j) == 2) { // ...
如果您要从常规文件中读取内容,那么这本身就足够了,但是,如果您要读取无限量的交互式输入内容,则必须依靠用户提供某种指示符,使他们无法提供更多信息。他们可以发送文件结束信号(在Windows上为
scanf_s
返回成功转换的字段数。如果出错,它将返回0
或EOF
。
您的逻辑假设任何非零值都是成功的。当返回值为EOF时,该假设将失效。
尝试与您需要的字段数进行比较:
while (2 == scanf_s("%d %d",&))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。