c语言结构体数组赋值的问题!!

youwu211 2010-10-29 04:02:50
#include "stdio.h"
typedef struct xx
{
char name[20];
float mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
for(i=0;i<50;i++)
{
printf("输入名字:");
scanf("%s",xinxi[i].name);
printf("输入收入:");
scanf("%f",&xinxi[i].mo);
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c=='y');
else if(c=='n')
break;
}
}
为什么只能录入一次后面就跳过了 !!!!!!!
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_shun 2010-10-30
  • 打赏
  • 举报
回复
建议楼主单步调试看下
东大坡居士 2010-10-30
  • 打赏
  • 举报
回复
清除缓冲区。。。。。。。
sweatdeath 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 haitunxiaomo 的回复:]
不要用float型了,改成int就好了。下面是正确的

#include "stdio.h"
typedef struct xx
{
char name[20];
int mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
for(i=0;i<50;i++)
{
printf("输入名字:"……
[/Quote]
改成int型 后录入英文字符会崩溃,还是别改好
muxiazhinian 2010-10-29
  • 打赏
  • 举报
回复
同意上楼的
yiruirui0507 2010-10-29
  • 打赏
  • 举报
回复
#include "stdio.h"
typedef struct xx
{
char name[20];
float mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
for(i=0;i<50;i++)
{
printf("输入名字:");
scanf("%s",xinxi[i].name);
printf("输入收入:");
fflush(stdin);
scanf("%f",&xinxi[i].mo);
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c=='y');
else if(c=='n')
break;
}
}
無_1024 2010-10-29
  • 打赏
  • 举报
回复

#include "stdio.h"
typedef struct xx
{
char name[20];
double mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
double f;
for(i=0;i<50;i++)
{
printf("输入名字:");
scanf("%s",xinxi[i].name);
fflush(stdin);//清除缓存 因为scanf是用缓存读写的
printf("输入收入:");
scanf("%lf",&f);//输入浮点数的精度问题最好在输入时用一个double申明一下表示你输入的是double
xinxi[i].mo = f;
fflush(stdin);//清除缓存 因为scanf是用缓存读写的
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c =='y')
;
else if(c=='n')
break;
}
}


如影随从 2010-10-29
  • 打赏
  • 举报
回复
刚才重新改了,看明白了,其实你程序中多次输入的话,必须进行缓冲处理。要加
fflush(stdin);来修改。
下面是改过的,还是float型的

#include "stdio.h"
typedef struct xx
{
char name[20];
float mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
for(i=0;i<50;i++)
{
printf("输入名字:");
scanf("%s",xinxi[i].name);
printf("输入收入:");
fflush(stdin);
scanf("%f",&xinxi[i].mo);
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c=='y');
else if(c=='n')
break;
}
}
如影随从 2010-10-29
  • 打赏
  • 举报
回复
不要用float型了,改成int就好了。下面是正确的

#include "stdio.h"
typedef struct xx
{
char name[20];
int mo;
}XX;
int zong=0;
XX xinxi[50];
void main()
{
char c;
int i;
for(i=0;i<50;i++)
{
printf("输入名字:");
scanf("%s",xinxi[i].name);
printf("输入收入:");
scanf("%d",&xinxi[i].mo);
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c=='y');
else if(c=='n')
break;
}
}
morgan_xww 2010-10-29
  • 打赏
  • 举报
回复
在这个语句: scanf("%f",&xinxi[i].mo); 后面加上一句: getchar(); 就OK 了啊!!!!


原因是你scanf("%f"); 后有一个回车,这个回车也是一个字符,就直接被你后面的scanf("%c",&c);接受了。

加上一句 getchar();的作用就是吃掉那个回车字符。。。。。
walkersfaint 2010-10-29
  • 打赏
  • 举报
回复
清空缓冲区.

scanf("%f",&xinxi[i].mo);
fflush(stdin);
printf("是否继续录入(y/n)");
scanf("%c",&c);
if(c=='y')
continue;
else
break;
}
youwu211 2010-10-29
  • 打赏
  • 举报
回复
兄弟姐妹们帮下忙啊!!!!!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧