更新:應該是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=0; i<len; i++) {
printf("請輸入 %d\n", i+1);
printf("score = ");
scanf("%lf", &pArr[i].score);
printf("name = ");
scanf("%s", pArr[i].name);
printf("age = ");
scanf("%d", &pArr[i].age);
}
free(pArr);
return 0;
說明有可能咱們的編譯器不一樣~
更新:應該是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=0; i<len; i++) {
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;
}
說明有可能咱們的編譯器不一樣~