回覆列表
  • 1 # 手機使用者86357592554

    更新:應該是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;

    }

    說明有可能咱們的編譯器不一樣~

  • 中秋節和大豐收的關聯?
  • 季節性鼻炎每次一到換季,鼻子就不通難受發紅,不停的打噴嚏,該怎麼辦?