为什么我的这个C代码,两个完全一样的程序(复制粘贴的),一个能运行,不能运行的始终不能运行?

为什么我的这个C代码,两个完全一样的程序(复制粘贴的),一个能运行,不能运行的始终不能运行?,第1张

更新:应该是scanf的问题。scanf在读取一个字符串之后再读取数字,有时就会出现问题。

你可以试试这几句话:

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软伍戚件去分析。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存