请教简单而奇怪的结构体问题,多谢!
一道很简单的结构体数组问题。我写的程序如下,但是每当我输入2个结构体之后,程序不给我输入第3个结构体的时间,直接输出我前两个结构体,并且中间有乱码。请大家运行一下试试看,看问题出在哪里?多谢。
# include "stdio.h "
# include "stdlib.h "
main()
{
struct stud
{
char name;
int number;
int year;
};
struct stud grade[3];
int i;
printf( "Please input task:\n ");
printf( "N S Y\n ");
for(i=0;i <3;i++)
scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
printf( "The results are:\n ");
for(i=0;i <3;i++)
printf( "%c %d %d\n ", grade[i].name, grade[i].number, grade[i].year);
}
[解决办法]
# include "stdio.h "
# include "stdlib.h "
main()
{
struct stud
{
char name;
int number;
int year;
};
struct stud grade[3];
int i;
printf( "Please input task:\n ");
printf( "N S Y\n ");
for(i=0;i <3;i++)
scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year); <===
这里更改为scanf( "%c %d %d ", grade[i].name, &grade[i].number, &grade[i].year);
printf( "The results are:\n ");
for(i=0;i <3;i++)
printf( "%c %d %d\n ", grade[i].name, grade[i].number, grade[i].year);
}
[解决办法]
输入完第一组数据后按的回车会作为%c在第二组数据的name存放,所以导致错误。
"%c %d %d "改为 "%c %d %d\n ",在输完所有数据后按Ctrl+Z。
[解决办法]
这个问题出现过好多次了,还是缓冲区的问题,解决方法:
1. for(i=0;i <3;i++)
{ scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
getchar();
}
2. for(i=0;i <3;i++)
{ scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
fflush(stdin);
}
[解决办法]
我试了上面所有的解决方法
不过还是存在问题
要不错误
要不要输入多行(不止三行)