标题:我写的这段代码循环出错了,求解释!!
只看楼主
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
结帖率:95.24%
已结贴  问题点数:4 回复次数:7 
我写的这段代码循环出错了,求解释!!
#include<stdio.h>
#include<string.h>
struct stu
{
char name[20];
int end;
int classmate;
char cadre;
char east;
int rest;
}s[100];
int main()
{
struct stu s[100];
int x,i,t,sum=0,max=0,esum=0;
scanf("%d",&x);
for(i=0;i<x;i++)
{
  scanf("%s%d%d",&s->name,&s->end,&s->classmate);
  getchar("%c",&s->cadre);
  getchar("%c",&s->east);
  scanf("%d",&s->rest);
}
for(i=0;i<x;i++)
{
  if(s->end>80&&s->rest>0)
   sum=sum+8000;
  if(s->end>85&&s->classmate>80)
   sum=sum+4000;
  if(s->end>90)
   sum=sum+2000;
  if(s->end>85&&s->east=='Y')
   sum=sum+1000;
  if(s->classmate>80&&s->cadre=='Y')
   sum=sum+850;
  esum+=sum;
  if(sum>max)
  {
   max=sum;
   t=i;
  }
}
printf("%s\n",s[t].name);
printf("%d\n%d\n",sum,esum);
return 0;
}
这弄死我了,死活好不了。我循环输入的时候就是差一个输入。我却看不出问题,f7(vc)时没有报错呀!!!!
搜索更多相关主题的帖子: name max include 
2013-05-09 11:03
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
得分:0 

你知道你这个符号在你的程序里是什么意思吗
"->",这是用在指针的,相当于解引用运算付了。
但是你这里那里声明有指针???
2013-05-09 16:06
shuimu10
Rank: 2
等 级:论坛游民
帖 子:53
专家分:48
注 册:2010-11-19
得分:0 
程序代码:
for(i=0;i<x;i++){       
    scanf("%s%d%d",s[i].name,s[i].end,s[i].classmate);
    getchar();       
    getchar(s[i].cadre);
    getchar();       
    getchar(s[i].east);       
    scanf("%d",s[i].rest);
    getchar();
}
2013-05-09 17:22
shuimu10
Rank: 2
等 级:论坛游民
帖 子:53
专家分:48
注 册:2010-11-19
得分:0 
注意getchar的回车,第一个scanf的回车键还停留在stdin中。所以如果没有getchar();
回车就会被cadre接受。

而且lz好像很喜欢用-> 你用结构体指针也应该是 (s+i)-> 才行啊,不然你的for循环拿来干什么
2013-05-09 17:26
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
得分:0 
回复 4楼 shuimu10
谢谢你回到了点上,但对于getchar()那里同学你可不可以在多说点。谢谢。
2013-05-09 22:00
Han_FlyB
Rank: 6Rank: 6
等 级:侠之大者
帖 子:143
专家分:424
注 册:2013-3-25
得分:0 
没有指针不用 ->
2013-05-09 23:36
shuimu10
Rank: 2
等 级:论坛游民
帖 子:53
专家分:48
注 册:2010-11-19
得分:4 
回复 5楼 雪山的猫


程序代码:
#include<stdio.h>
#include<string.h>
struct stu{
    char name[20];
    int end;
    int classmate;
    char cadre;
    char east;
    int rest;
}s[100];
int main(){
    int x,i,t,sum=0,max=0,esum=0;
    scanf("%d",&x);
    for(i=0;i<x;i++){
         scanf("%s%d%d",s[i].name,&(s+i)->end,&(s+i)->classmate);
          getchar();
        s[i].cadre = getchar();
        getchar();
          s[i].east = getchar();
          scanf("%d",&(s+i)->rest);
        getchar();
    }
    for(i=0;i<x;i++){
          if((s+i)->end>80&&(s+i)->rest>0)
               sum=sum+8000;
          if((s+i)->end>85&&(s+i)->classmate>80)
               sum=sum+4000;
          if((s+i)->end>90)
               sum=sum+2000;
          if((s+i)->end>85&&(s+i)->east=='Y')
               sum=sum+1000;
          if((s+i)->classmate>80&&(s+i)->cadre=='Y')
               sum=sum+850;
          esum+=sum;
          if(sum>max){
               max=sum;
               t=i;
          }
    }
    printf("%s\n",s[t].name);
    printf("%d\n%d\n",sum,esum);
    return 0;
}
首先是scanf函数,你在终端输入 abc 12 23回车,标准输入流里有abc 12 23和回车字符
把abc放到name中遇到空格结束,接着把12放到end中,再下来把23放到classmate中
剩下一个回车符没被获取,如果下一行不用getchar函数,你在终端输入字符a时
stdin里就有三个字符 回车a和回车,第一个回车被cadre接收,接下来的情况是差不多的。
如果用了getchar函数就会getchar函数把回车吸收,字符a放置在cadre中。
2013-05-10 09:12
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
得分:0 
lz给你提个建议,在学代码时要加一些错误提示语句,比如在输入变量x时,如果x<0,应该要有错误提示(printf("输入数据有误!\n");)
2013-05-10 17:40



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




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

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