请教简单而奇怪的结构体问题,多谢!
一道很简单的结构体数组问题。我写的程序如下,但是每当我输入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);
}
[解决办法]
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);
[解决办法]
# 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( "%s %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
printf( "The results are:\n ");
for(i=0;i <3;i++)
printf( "%s %d %d\n ", grade[i].name, grade[i].number, grade[i].year);
}
[解决办法]
输入完第一组数据后按的回车会作为%c在第二组数据的name存放,所以导致错误。
"%c %d %d "改为 "%c %d %d\n ",在输完所有数据后按Ctrl+Z。
[解决办法]
刚才写错了
这样才对
int 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\n ", &(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);
return 0;
}
[解决办法]
楼上的完全搞错了。。。
这个问题出现过好多次了,还是缓冲区的问题,解决方法:
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);
}
[解决办法]
scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
楼上的%c是字符啊,应该%s才对
[解决办法]
for(i=0;i <3;i++)
{
scanf( "%c %d %d ", &grade[i].name, &grade[i].number, &grade[i].year);
fflush(stdin);
}
顶
bargio_susie(平和 自制 审慎)
[解决办法]
fflush(stdin);清除缓冲区
[解决办法]
在dev cpp下编译了一下,fflush(stdin)可以,但是getchar()方案不行啊 和lz说的一样的错误