#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可以正常运行? 有什么修改方法?
用清空缓存的方法试一下,我记得我以前也遇到过这种情况,具体忘记怎么解决的了,好像是跟缓存有关;在循环后边加上fflush(stdin),每输入一次人后就清空一次输入缓冲区,你先尝试下可不可以。对了,忘记提醒你,malloc之后,用完的时候一定要记得free掉,不然造成内存堆区内存碎片,对内存造成浪费,你的堆区内存是固定的大小,分配完不去free掉的话,这一段连续内存就是属于占用状态,而malloc分配的内存都是连续的,所以导致你这块内存属于不可使用状态,碎片就是这么产生的,一定要注意了。
因为你定义的float是实型但是后面是字符,而你后面的字符未赋值,所以你就用实型定义了字符。后面你改一下float或者给你float定义的字母赋值就行了 追问 我想让float后的 各项值是我自己输入 来确定 而不是直接赋值好的 你说的 在后面改下float 什么意思? 在什么位置改?
printf("员工姓名:");scanf("%s", pArr->name); //对姓名这个元素的输入你的输入姓名里是否包含空格???scanf获取的字符串遇到空格 制表符 回车等会结束,剩下的字符仍然在输入流里,会被你后续的scanf获取。你可以把上面获取字符串的改用 gets()函数,可以获取包含空格的字符串。 另外,网上你再搜索下 scanf的用法。