为了账号安全,请及时绑定邮箱和手机立即绑定

while循环中scanf的返回值

while循环中scanf的返回值

C
慕用4063026 2017-10-28 21:47:11
while(scanf("%d",&n[i])!=1)解释一下这里!=1和==1的区别以下源码:#include <stdio.h>int main(void) {     int n[8];     printf("Enter the integer:\n"); for(size_t i=0;i<8;i++) while(scanf("%d",&n[i])!=1){    printf("continu\n"); } for(size_t i=8;i>=1;i--) printf("%d",n[i-1]); getchar(); getchar(); return 0;}
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

“==1 的话不是读取成功一个值继续吗”——那么你的意图是“继续”什么呢?

scanf 返回 1 确实表示成功读取这个值。== 1 的判断结果为 true,这会进入执行 while 循环体,可这个循环体只是打印出一句话,然后又继续执行 while 判断部分的 scanf——你还是在这个 while 循环中没出去!   所以如果你输入正确,那你根本没法“继续”,而是被困在了 while 循环中。

而且,你这样判断“读取成功”的行为没有意义啊!  如果成功读取那就执行后面的语句呗,为何要判断呢??


如果是判断“读取失败”的话还有点用。如果读取失败,就提示你再次输入正确的值。这一般可以用循环来处理,比如 while (scanf读取,判断是否失败) {读取失败,提示你再次输入}。


但是代码中 while(scanf("%d",&n[i])!=1) {printf("continu\n");} 这个方法并不能达到目的

如果 scanf 匹配“输入流”中的内容失败,那么输入流中错误的内容还会留在输入流中! 

那么一旦 scanf 匹配失败,scanf 返回 0,则满足 while 循环条件,while 的循环体打印出一句"continu"后开始下一次循环,即再次执行 while 的判断部分。由于输入流中的错误内容还在,scanf 仍然会读到这些错误内容,仍然会匹配失败......这会导致 while 死循环!


查看完整回答
反对 回复 2017-10-29
  • 慕用4063026
    慕用4063026
    改成continue;呢?语句循环顺序能说一下吗,麻烦了
  • onemoo
    onemoo
    continue语句就是直接执行下一次循环。本来题目中代码的这个循环体中就没做什么事,就算什么都不写也是执行下一次循环。所以改成continue语句也是完全一样。
?
慕用4063026

TA贡献195条经验 获得超115个赞

==1 的话不是读取成功一个值继续吗 ,可是==1的话代码就读不出倒序

查看完整回答
反对 回复 2017-10-28
  • 2 回答
  • 0 关注
  • 2263 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信