C语言为什么我一定义成float 然后输入的时候 到第二个输入后 vc++6.0就会报错

#include <stdio.h>
#include <malloc.h>

struct staff
{
char name[5];
float App;//earence; 仪容、仪表
float t;//eletiquette; 电话礼仪
float f;//ormal; 书信、文档、邮件是否符合规范
float a;//ttitude; 工作态度
float team;//worker; 是否具有团队合作精神
float r;//espond; 对你的需求是否及时响应
float s;//olveproblem; 是否及时解决并跟踪您的问提

};

void input(struct staff *pArr,int len)
{
int i;
for(i=0; i<len; i++)
{

printf("请输入第%d个学生的信息:\n", i+1);
printf("员工姓名:");
scanf("%s", pArr->name); //对姓名这个元素的输入

printf("仪容、仪表:");
scanf("%f", &pArr[i].App); //输入这条信息后 程序就会出错 然后我讲结构体中的float换成int就是可以正常运行的 求解

printf("电话礼仪:");
scanf("%f", &pArr[i].t);

printf("书信、文档、邮件是否符合规范:");
scanf("%f", &pArr[i].f);

printf("工作态度:");
scanf("%f", &pArr[i].a);

printf("是否具有团队合作精神:");
scanf("%f", &pArr[i].team);

printf("对你的需求是否及时响应:");
scanf("%f", &pArr[i].r);

printf("是否及时解决并跟踪您的问提:");
scanf("%f", &pArr[i].s);

}

}

int main(void)
{
int i;
int len;
struct staff *pArr;
printf("请输入员工的人数:\n");
scanf("%d", &len);
pArr = (struct staff *)malloc(len*sizeof(struct staff)); //构造动态内存

//shuru
input(pArr, len);

return 0;
}

input函数中 为什么下面几个为什么我一定义成float 然后输入的时候 到第二个输入后
vc++6.0就会报错 而int可以正常运行?
有什么修改方法?
最新回答
红颜ヽ祸水-

2024-12-02 07:08:13

用清空缓存的方法试一下,我记得我以前也遇到过这种情况,具体忘记怎么解决的了,好像是跟缓存有关;在循环后边加上fflush(stdin),每输入一次人后就清空一次输入缓冲区,你先尝试下可不可以。
对了,忘记提醒你,malloc之后,用完的时候一定要记得free掉,不然造成内存堆区内存碎片,对内存造成浪费,你的堆区内存是固定的大小,分配完不去free掉的话,这一段连续内存就是属于占用状态,而malloc分配的内存都是连续的,所以导致你这块内存属于不可使用状态,碎片就是这么产生的,一定要注意了。
阴郁钢琴

2024-12-02 05:31:51

因为你定义的float是实型但是后面是字符,而你后面的字符未赋值,所以你就用实型定义了字符。后面你改一下float或者给你float定义的字母赋值就行了
追问
我想让float后的 各项值是我自己输入 来确定 而不是直接赋值好的 
你说的 在后面改下float 什么意思? 在什么位置改?
傲骨

2024-12-02 14:09:30

printf("员工姓名:");
scanf("%s", pArr->name); //对姓名这个元素的输入

你的输入姓名里是否包含空格???
scanf获取的字符串遇到空格 制表符 回车等会结束,剩下的字符仍然在输入流里,会被你后续的scanf获取。

你可以把上面获取字符串的改用 gets()函数,可以获取包含空格的字符串。

另外,网上你再搜索下 scanf的用法。