比如说我想在结构体中输入:
#include
struct score
{
int num;
char c[6];
int M;
int E;
int Chi;
int P;
int Che;
int sum;
};
void main()
{
struct score student[3];
int i;
for(i=0;i<3;i++)
{
scanf("%d%c%d%d%d%d%d",&student[i].num,&student[i].M,&student[i].E,&student[i].Chi,&student[i].P,&student[i].Che);
student[i].sum=student[i].M+student[i].E+student[i].Chi+student[i].P+student[i].Che;
}
for(i=0;i<3;i++)
printf("num=%d\tM=%d\tE=%d\tChi=%d\tP=%d\tChe=%d\tsum=%d\t",student[i].num,student[i].M,student[i].E,student[i].Chi,student[i].P,student[i].Che,student[i].sum);
}
我的输入语句【scanf("%d%c%d%d%d%d%d",&student[i].num,&student[i].M,&student[i].E,&student[i].Chi,&student[i].P,&student[i].Che);
】在执行的时候,只能输入一次,且结果是随机数,这是怎么回事?
我应该怎样改会方便输入?
存在如下问题:
1. 我看不到你include的头文件,想必是stdio.h吧。
2. student这个数组未进行初始化,所以在一开始这个数组中各个成员的各个域具有一个不定的初始化值
3. scanf的时候,第二个参数指定%c,但是他是整形,所以只取用了4个字节中的低位字节进行赋值,在BigEnding和LittleEnding的机器上将具有不同的结果,但是都会错:这一个接收了输入的字节加上另外三个具有不确定值的字节,一般来说,你或者会得到一个很大的值,或者得到一个负值
4.同样的,scanf的地方,格式字串中指定了7个参数,但你只用了6个来接受,所有最后一个输入完全没有意义
5.因为sum是加出来的,所以最后不但M,而且SUM都会出错.
6.然后,建议你输出的时候,每一个成员按一行输出,这样会比较容易观察.另外,从你system("pause");这一行代码来看,你是在windows上完成的吧...
最后,提出一点建议:命名,编码最好改进一下;再有就是你定义的这个数组最好考虑到字节对齐的问题.
Scanf函数第二个输入参数 &student[i].M 明明是int型,你用%c当然是随机数了
scanf是原样格式输入函数,需要原样输入,那么你输入的时候,7个整数中间只能输入回车,空格或tab键,不能有任何其他字符。因为scanf默认以回车、空格或tab(不同系统不一样)表示一个数的输入结束。
#include
struct score
{
int num;
char c[6];
int M;
int E;
int Chi;
int P;
int Che;
int sum;
};
int main()
{
struct score student[3];
int i;
for(i=0;i<3;i++)
{
scanf("%d %d %d %d %d %d", &student[i].num, &student[i].M, &student[i].E, &student[i].Chi, &student[i].P, &student[i].Che);
student[i].sum=student[i].M+student[i].E+student[i].Chi+student[i].P+student[i].Che;
}
for(i=0;i<3;i++)
printf("num=%d\tM=%d\tE=%d\tChi=%d\tP=%d\tChe=%d\tsum=%d\t",student[i].num,student[i].M,student[i].E,student[i].Chi,student[i].P,student[i].Che,student[i].sum);
system("pause");
return 0;
}