| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6567 人关注过本帖
标题:while语句清除循环内变量数据,怎么破?
取消只看楼主 加入收藏
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
结帖率:96.15%
收藏
已结贴  问题点数:15 回复次数:6 
while语句清除循环内变量数据,怎么破?
程序如下

#include <stdio.h>
int main(void)
{
    int a, b;
    int square1, square2, square_sum;
    int i;
   
   
        printf("Enter lower and upper integer limits: ");
   
    while(scanf("%d%d", &a, &b))
    {
        if(a <= b || (a != 'q' && b != 'q'))
        {
        for(i = a; i <= b; i++)
            square_sum += i*i;
            square1 = a*a;
            square2 = b*b;
        printf("The sums of the squares from %d to %d is %d\n", square1, square2, square_sum);
        printf("Enter next set of limits: ");
            
    }
        else
            printf("Done\n");
    }
    return 0;
  
}
两点问题,第一,重新输入数据之后平方和会和上次循环剩下的数据叠加,导致错误;
第二,这个程序我输入相等的两个数仍然会进入第一个循环,且当我输入q的时候程序直接停止,由于我使用的编译器多次出问题,所以请各位大神帮我测试下这波是我的软件问题还是程序有误。
搜索更多相关主题的帖子: limits Enter 
2016-08-18 20:57
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 3楼 ehszt
请问下你的程序里
        if(i!=2&&getchar()=='q')break;
        while(getchar()!='\n');
        square_sum=0;
这两个前两个语句分别是什么作用?
我试着分析了一下:
1,当输入值不为true且输入值为q的时候,结束循环,进入下一个语句。那么当输入值既不为true也不为q的时候,理论上也是进入下一个语句吧?(我特意翻了这一章里讲解break的内容),而该循环由于只有单个break语句,因此理论上输入任何值都应该直接跳出循环进入下一个语句,这样的话这个语句好像没什么作用,是这样的吗?
2,当输入完两个整数之后,输入“enter”也就是“\n”以启动程序,因此我为了使进入下一次循环前数据被清空,在输入”\n“后必须使sum值初始化为0。而您的程序里这一句的意思我理解为d当输入两个数值之后的第三个字符不为“\n”时,初始化sum值,换言之每次确认输入后,sum值都应该不被初始化。然而我测试过后,发现您的语句是对的,我的理解是错的,so烦请不吝赐教。
2016-08-19 16:42
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
照着您的格式再提一个问题:
第一句里输入q退出循环,请问是退出哪个循环?书上写“循环中的break语句导致程序终止包含它的循环,并进行程序的下一阶段”“如果break语句位于嵌套循环里,它只影响包含它的最里层的循环“。那么显而易见这里的break应是退出当前的if循环,进行下一阶段。那假如输入i==2||getchar()!='q',似乎程序就会略过这个语句,依然进行下一阶段,那请问这个语句的作用体现在哪里?而当实际上这个语句产生效用的时候,又究竟是如上我述说的哪一部分有误呢?

2016-08-19 18:25
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 5楼 ehszt
照着您的格式再提一个问题:
1.第一句里输入q退出循环,请问是退出哪个循环?书上写“循环中的break语句导致程序终止包含它的循环,并进行程序的下一阶段”“如果break语句位于嵌套循环里,它只影响包含它的最里层的循环“。那么显而易见这里的break应是退出当前的if循环,进行下一阶段。那假如输入i==2||getchar()!='q',似乎程序就会略过这个语句,依然进行下一阶段,那请问这个语句的作用体现在哪里?而当实际上这个语句产生效用的时候,又究竟是如上我述说的哪一部分有误呢?
2.而且为什么要使用getchar()==q而不能是a = 'q'||b == 'q'?
2016-08-19 18:30
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 8楼 ehszt
可我疑惑的是,退出while(1)循环后为什么我输入q会显示done。
2016-08-19 19:50
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 10楼 ehszt
我知道了。是因为我用xcode,输入的字母都会自动转换成大写字母被读取。哎,绕了这么多圈原来还是软件的锅。
2016-08-19 20:17
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 10楼 ehszt
谢谢这位大兄弟啦
2016-08-19 20:21
快速回复:while语句清除循环内变量数据,怎么破?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015947 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved