标题:程序有问题,算法没问题,为什么就循环停不了,哪位牛解决一下嘛,搞了半天 ...
只看楼主
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
已结贴  问题点数:20 回复次数:13 
程序有问题,算法没问题,为什么就循环停不了,哪位牛解决一下嘛,搞了半天了
就是如果输入错误,就会循环不止
#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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:20 
你解釋清楚自己的問題是什麼?想達到什麼目的,算法如何沒有問題了?算法沒有貫徹你的意圖嗎?

授人以渔,不授人以鱼。
2012-02-21 00:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
其實,如果你的語言(不管是自然語言還是C語言)組織能力過關,看到代碼中同樣的printf()和scanf()語句出現了兩次,都覺得彆扭啦,還寫下去?

授人以渔,不授人以鱼。
2012-02-21 00:32
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你那代碼中的邏輯,每次scanf()的數據只要沒有成功6個,就一直循環下去,完全按照你死循環的要求執行,哪來的問題?

scanf()中有6個數據要輸入,你就必須一次輸入成功6個,只要有一個錯,都會循環再要求輸入6個。注意:每次輸入都要重複6個數據!這是你自己設計的代碼。

授人以渔,不授人以鱼。
2012-02-21 00:54
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
清空輸入緩存,壇子上很古老的問題了,你又不是沒見過。寫代碼的時候,先調試過這個循環有沒有問題,應該自己想到的,不是總問人。你自己都發現是這個循環出古怪了,就輸出j看看它的變化規律呀。懂如何排查問題才是正道,不要埋頭寫代碼,沒用的。聽得進就聽吧,聽不進當我沒說,屢教不改的人太多了,這種話我都不知說過多少遍。

其實,你這個目的是不需要兩次重複同樣的printf()和scanf()語句的(這種重複是程序代碼大忌,不知有沒有人告訴過你了),冗餘代碼太多,是造成自己難以排錯的主要原因。

[ 本帖最后由 TonyDeng 于 2012-2-21 01:18 编辑 ]

授人以渔,不授人以鱼。
2012-02-21 01:11
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
得分:0 
以下是引用TonyDeng在2012-2-21 01:11:32的发言:

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

认为事物非黑即白是缺智慧的表现……
2012-02-21 01:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361272-1-1.html




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

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