首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言 结构 程序有关问题

2012-09-24 
C语言结构程序问题该程序在运行第一个循环的时候第一次可以正常执行,但是第二次执行的时候会跳过Fname的输

C语言 结构 程序问题
该程序在运行第一个循环的时候第一次可以正常执行,但是第二次执行的时候会跳过Fname的输入请求也直接请求输入Mname,输出结果也没有第二次的Fname,请问各位大神这是因为什么。。



源码如下:
#include<stdio.h> 
struct name{
char fname[20];
char mname;
char lname[20];
} ; 
struct inform{
int num;
struct name na;
} ;
int main(void) { 
void output(struct inform c);
struct inform ca[2]; //定义结构数组
int i=0,j=0;
while(i<2)
{
printf("Fname:\n");
gets(&ca[i].na.fname);
printf("Mname\n");
scanf("%c",&ca[i].na.mname); 
while(getchar()!='\n')
continue; //丢掉本行其余的输入
printf("Lname\n");
gets(&ca[i].na.lname);
printf("Num:\n");
scanf("%d",&ca[i].num);
i++;
}

for(j=0;j<2;j++)
output(ca[j]);

getch();
return 0;


void output(struct inform c)
{
int i;

printf("%s %s %c. %d\n",c.na.fname,c.na.lname,c.na.mname,c.num); 
}


[解决办法]
scanf("%d",&ca[i].num);
getchar();//应该可以了,你可以试试
i++;

[解决办法]

i/o 缓冲区问题,在第二次循环时将第一轮循环最后输入的“回车”或者“换行符”自动读入了

gets(&ca[i].na.fname);

所取得的fname中。

修改方法:

(1)scanf("%d",&ca[i].num);

>getchar();

(2)i++;

在下面2行中插入一个getchar();

将“换行符”或“回车符”忽略。

热点排行