C语言——while循环中i和scanf的放置顺序问题-创新互联
背景:我们在运用数组解决问题的过程中经常会搭配while循环语句来一起解题,如果采用while语句来操作数组的输入的时候,会发现有几种情况。
成都创新互联公司是一家专注网站建设、网络营销策划、微信小程序开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立10多年以来,已经为上千家成都集装箱各业的企业公司提供互联网服务。现在,服务的上千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。1、进不了循环,不让你输入,直接打印结果。
2、进入了循环,但是赋值只成功了一个
3、进入了循环,是从数组的第二个元素开始赋值的
如果你也出现过以上三种情况,恭喜你!!!陷入了while语句的固有缺陷里面
while语句的固有缺陷:是先判断在操作循环语句。因此,定义数组的时候你无法控制数组里面的每一个元素,当while判断循环条件的时候,总是会同初始的数组里面的数进行比较,因此会经常出现问题。
1)第一种错误:进不了循环,不让你输入,直接打印结果。a[10] = {?,?,?,?,?,?....}(编译器随机给的值)
第一次循环:a[0] = -1092760768 ,不满足条件,直接退出循环。
第一种错误,只要打印出里面的值,就会发现错误;
2)第二种错误、只能输入一个数字,然后退出循环。在如图循环里面就值就能进入一次循环。
a[10] = {1,0,0,0,0,0,0,0,0,0};
while循环第一次,a[0] = 1;满足条件,进入循环,scanf a[0] 的值 ,i++;
while循环第二次,a[1] = 0; 不满足循环条件,不进入循环,直接退出循环。
这就是上面的第二个坑。也是最常见的一种错误。
3)进入了循环,是从数组的第二个元素开始赋值的如图所示:这个是从a[1]开始赋值的,a[0] = 1,的值没有改变,因为把 i 的位置提前了,就跳过了a[0] ,接下来就抛出了另一个问题了,为啥其他条件相同,把 i ++ 提前就能成功进入循环了呢?
先来看看代码的流程:
第一次循环:a[0] = 1,满足循环条件,进入循环, i++,i = 1,输入a[1] 的值:5
第二次循环: a[1] = 5,满足循环条件,进入循环,i++,i = 2,输入a[2] 的值: 6
第三次循环:a[2] = 6,满足循环条件,进入循环.............
以上三次循环,不难发现,能进入循环的原因就是:while判断的循环条件一直是你输入的那个数,所以循环很容易控制。
这就是第三种坑了。
问:有没有一种可以循环,而且还不跳过a[0] 的优秀办法吗?
解法一、把while换成 do - while,让do先输入,在让while判断。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前题目:C语言——while循环中i和scanf的放置顺序问题-创新互联
链接分享:http://scyanting.com/article/dgspgi.html