2 u013012497 u013012497 于 2013.12.08 11:51 提问

c语言中当字符串和整形数据一起的时候应该怎样输入?

比如说我想在结构体中输入:
#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);
】在执行的时候,只能输入一次,且结果是随机数,这是怎么回事?
我应该怎样改会方便输入?

4个回答

gaintsord
gaintsord   2013.12.17 11:30
已采纳

存在如下问题:
1. 我看不到你include的头文件,想必是stdio.h吧。
2. student这个数组未进行初始化,所以在一开始这个数组中各个成员的各个域具有一个不定的初始化值
3. scanf的时候,第二个参数指定%c,但是他是整形,所以只取用了4个字节中的低位字节进行赋值,在BigEnding和LittleEnding的机器上将具有不同的结果,但是都会错:这一个接收了输入的字节加上另外三个具有不确定值的字节,一般来说,你或者会得到一个很大的值,或者得到一个负值
4.同样的,scanf的地方,格式字串中指定了7个参数,但你只用了6个来接受,所有最后一个输入完全没有意义
5.因为sum是加出来的,所以最后不但M,而且SUM都会出错.
6.然后,建议你输出的时候,每一个成员按一行输出,这样会比较容易观察.另外,从你system("pause");这一行代码来看,你是在windows上完成的吧...
最后,提出一点建议:命名,编码最好改进一下;再有就是你定义的这个数组最好考虑到字节对齐的问题.

qiaolin19890323
qiaolin19890323   2013.12.10 15:59

scanf是原样格式输入函数,需要原样输入,那么你输入的时候,7个整数中间只能输入回车,空格或tab键,不能有任何其他字符。因为scanf默认以回车、空格或tab(不同系统不一样)表示一个数的输入结束。

firstblood2008
firstblood2008   2013.12.16 14:14

#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;
}

firstblood2008
firstblood2008 控制符和参数的个数都不对应
大约 4 年之前 回复
yandfani
yandfani   2013.12.08 22:18

Scanf函数第二个输入参数 &student[i].M 明明是int型,你用%c当然是随机数了

u013012497
u013012497 我改过来了。。。但还是随机数,是怎么回事?
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!