| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 955 人关注过本帖
标题:程序有问题,算法没问题,为什么就循环停不了,哪位牛解决一下嘛,搞了半天 ...
取消只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:20 回复次数:7 
程序有问题,算法没问题,为什么就循环停不了,哪位牛解决一下嘛,搞了半天了
就是如果输入错误,就会循环不止
#include <stdio.h>
#include <stdlib.h>
struct user
{
    int userid;
    char name[30];
    char sex;
    int age;
    double score;
    char level;
};
   struct user sum[10];/*定义结构体变量数组,有10个成员*/
void input()
{
    int i=0,j=6,flag=1;
   for(i=0;i<10;i++)
    {   
         printf("输入第%d个同学的编号 姓名 性别 年龄 成绩 优良差等级 当中用空格隔开\n",i+1);
         j=scanf("%d %s %c %lf %c",&sum[i].userid,&sum[i].name,&sum[i].sex,&sum[i].age,&sum[i].score,&sum[i].level);
        
         if(j<6) flag=1;
         else    flag=0;
        while(flag==1)
           {
            printf("输入有错,请重新输入\n");
            printf("输入第%d个同学的编号 姓名 性别 年龄 成绩 平均成绩 当中用空格隔开\n",i+1);
            j=scanf("%d %s %c %lf %c",&sum[i].userid,&sum[i].name,&sum[i].sex,&sum[i].age,&sum[i].score,&sum[i].level);
            if(j<6) flag=1;
            else    flag=0;
            }
    }
   
}
int main()
{
       input();
}



[ 本帖最后由 a271885843 于 2012-2-25 11:07 编辑 ]
搜索更多相关主题的帖子: 算法 include double 结构体 
2012-02-20 23:51
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
不晓得什么地方出错了。

认为事物非黑即白是缺智慧的表现……
2012-02-21 00:11
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-21 00:32:03的发言:

其實,如果你的語言(不管是自然語言還是C語言)組織能力過關,看到代碼中同樣的printf()和scanf()語句出現了兩次,都覺得彆扭啦,還寫下去?
题目是这么回事,刚才看见另一童鞋整了个结构体,我改了下,然后觉得应该要验证是否输入正确的,然后就写了下面的一些验证程序了,并输入正确的数据为止
程序代码:
  if(j<6) flag=1;
         else    flag=0;
        while(flag==1)
           {
            printf("输入有错,请重新输入");
            printf("输入第%d个同学的编号 姓名 性别 年龄 成绩 平均成绩 当中用空格隔开\n",i+1);
            j=scanf("%d %s %c %lf %c",&sum[i].userid,&sum[i].name,&sum[i].sex,&sum[i].age,&sum[i].score,&sum[i].level);
            if(j<6) flag=1;
            else    break;
            }

 
j=scanf 返回的是一个按格式输入成功读取数据的个数,把他赋值给j,如果按格式正确输入6个数据,那flag=0,然后i++下一个循环,如果没有成功输入6个,那就flag=1然后进入while,然后在while循环里,输出错误提示,然后再次输入,如果j还是小于6个,那flag=1,while一直循环,直到j=6为止。不晓得有没其他的方法。至于我的自然语言,我写东西的时候确实有点口语化了,有很严重四川口语,不晓得怎么回事,其实我用白话也能表述,现在思维有点转不过来。好晚了,我脑袋上起了好多青春痘,好恼火,查了一下,是熬夜和油腻的原因,要早点休息了

认为事物非黑即白是缺智慧的表现……
2012-02-21 00:49
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-21 00:54:54的发言:

你那代碼中的邏輯,每次scanf()的數據只要沒有成功6個,就一直循環下去,完全按照你死循環的要求執行,哪來的問題?

scanf()中有6個數據要輸入,你就必須一次輸入成功6個,只要有一個錯,都會循環再要求輸入6個。注意:每次輸入都要重複6個數據!這是你自己設計的代碼。
就是要输入6个正确的啊,程序的问题就是进入while循环之后他没等我输入,他就一直循环printf语句,问题就是为什么在while中,他不等我再次scanf输入就一直printf
图片附件: 游客没有浏览图片的权限,请 登录注册
。在while里,至少要等我输入数据他再循环,为什么他不等我输入数据就开始printf死循环了。

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:03
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
早点休息了。明天再来修改这个程序。谢谢了,早点休息吧。

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:10
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-21 01:11:32的发言:

清空輸入緩存,壇子上很古老的問題了,你又不是沒見過。寫代碼的時候,先調試過這個循環有沒有問題,應該自己想到的,不是總問人。你自己都發現是這個循環出古怪了,就輸出j看看它的變化規律呀。懂如何排查問題才是正道,不要埋頭寫代碼,沒用的。聽得進就聽吧,聽不進當我沒說,屢教不改的人太多了,這種話我都不知說過多少遍。
噢,要清空输入缓存,我去试试,。谢谢你了哈,真的,本来想睡觉的,就是心里痒痒的,有点放不下,呵呵。我马上试试先,

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:15
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-21 01:11:32的发言:

清空輸入緩存,壇子上很古老的問題了,你又不是沒見過。寫代碼的時候,先調試過這個循環有沒有問題,應該自己想到的,不是總問人。你自己都發現是這個循環出古怪了,就輸出j看看它的變化規律呀。懂如何排查問題才是正道,不要埋頭寫代碼,沒用的。聽得進就聽吧,聽不進當我沒說,屢教不改的人太多了,這種話我都不知說過多少遍。

其實,你這個目的是不需要兩次重複同樣的printf()和scanf()語句的(這種重複是程序代碼大忌,不知有沒有人告訴過你了),冗餘代碼太多,是造成自己難以排錯的主要原因。
哈哈,就是没有清空缓存,加个fflush(stdin);就好了,能正常运行了。其实我真的不知道要清空缓存的用途,现在又算掌握了一知识点。呵呵

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:20
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-21 01:23:36的发言:

每次出問題,解決之後,一定要總結規律,徹底弄明白原理,這樣出錯才值得,不要只求解決問題就算,對原理不關心的人,肯定會再三再四地犯同類錯誤,那是沒出息的。
嗯。

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:26
快速回复:程序有问题,算法没问题,为什么就循环停不了,哪位牛解决一下嘛,搞了 ...
数据加载中...
 
   



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

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