C语言结构赋值问题。我这个程序那里出错?

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:59:25
为什么运行这句puts("Input Age:");这后,我输入一个整型数,程序会自动跳到打印了。为什么?我还有一个地址未输入?请各位教教小弟。

#include "stdio.h"
#include "conio.h"
main()
{
struct studen
{char stname[30];
char stsex[10];
int stold;
char stadd[30];}stsave;
puts("Input Nmae:"); gets(stsave.stname);
puts("Input Sex:"); gets(stsave.stsex);
puts("Input Age:"); scanf("%d",&stsave.stadd);
puts("Input Address:"); gets(stsave.stadd);
puts("_________________________________");
printf("Studen name : %s \n",stsave.stname);
printf("studen sex : %s \n",stsave.stsex);
printf("studen old : %s \n",stsave.stold);
printf("studen address : %s \n",stsave.stadd);
getch();
}

#include "stdio.h"
#include "conio.h"
main()
{
struct studen
{char stname[30];
char stsex[10];
int stold;
char stadd[30];}stsave;
puts("Input Nmae:"); gets(stsave.stname);
puts("Input Sex:"); gets(stsave.stsex);
puts("Input Age:"); scanf("%d",&stsave.stold); /* 是stold */

gets(NULL); /* 加一行这个 */

puts("Input Address:"); gets(stsave.stadd);
puts("_________________________________");
printf("Studen name : %s \n",stsave.stname);
printf("studen sex : %s \n",stsave.stsex);
printf("studen old : %d \n",stsave.stold); /* 是 %d */
printf("studen address : %s \n",stsave.stadd);
getch();
}

你程序中有一点笔误我给你改过来了。
是这样的,前面 scanf 读取 %d 的时候,是需要回车去结束读取的,但是这个回车是保留在缓冲区内的,下一次读 gets 的时候,就会读到这个回车,结果就不等用户输入就读了一个空字符串。我们加一行 gets 就可以把这个回车先读掉,然后就可以等待用户输入了。