你可以试试这几句话:
char s[20]
scanf("%s",s)
printf("string:%s:stringend\n",s)
char c = getchar()
printf("char:%c:charend\n",c)
如果你输入一个前后带几个空格的字符串,比如“123”,你会发现s忽略了前面的空格,读入了非空格字符(123),然后停在了后面的第一个空格,并把这个空格放回输入流了。所以,第二行就会立即租正执行,读入一个空格然后输出。
这是个很有可能的原因...不过更详细的错误可能需要你提供多一点的信息,比如输入样例和报错信息了。我自己试过,没有遇到问题。
---
我觉得最有可能的原因是struct的对齐问题,你可以把struct定义里头float挪到最上面试试。因为struct的对齐问题是不同编译器不太一样的,你可以提供多点信息,比如用的哪个编译器,和报错信息。
因为听你的描述,struct大小从28字节变成32字节就能正常运行,所以可能是这里的问题。
但是我跑过你的代码了,我能正孝好常运行,虽然我要把flushall()改成_flushall()
#include<stdio.h>
#include<malloc.h>
struct Student {
char name[20]
short int age
float score
}
int main(void) {
int len
int i
struct Student *pArr
printf("%d\n",sizeof(struct Student))
printf("请输入学生个数:\n")
printf("len = ")
scanf("%d", &len)
_flushall()
pArr = (struct Student*)malloc(sizeof(struct Student)*len)
for(i=0i<leni++) {
printf("请输入 %d\n", i+1)
_flushall()
printf("score = ")
scanf("%lf", &pArr[i].score)
_flushall()
printf("name = ")
scanf("%s", pArr[i].name)
printf("age = ")
scanf("%d", &pArr[i].age)
}
free(pArr)
return 0
}
说明有可能咱们的编译器弊慎悔不一样~
首先需要检查自己调用的dll库是否是x64版本,如果版本不正确,会出明橘弯现0xc000007b的错激闷误。如果一直用的是x64环境,dll库是从别的地方拿来的,可以使用depend软伍戚件去分析。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)