看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) VMware/fc8_fedora 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc 問題(Question): 兩段程式碼對照相同但是卡在scanf出現記憶體區段錯誤 餵入的資料(Input): #include <stdio.h> int main() { int x,y,z,x1,y1,z1; x=2;y=1,z=3; x1=x;y1=y;z1=z; x=z1;y=x1;z=z1+y1; printf("%d %d %d\n",x1,y1,z1); printf("%d %d %d\n",x,y,z); return 0; } #include <stdio.h> int main (void) { int a;//-----------------這裡造成錯誤的樣子... int x,y,z,x1,y1,z1/*,a*/;//------a放在裡面就沒問題,不懂為何冏 x=2;y=1;z=3; printf("type in the days rabbits live\n"); scanf("%d",a); // for(i=0;i<=a;i++) // { x1=x;y1=y;z1=z; x=z1;y=x1;z=z1+y1;//think the order // } printf("%d %d %d\n",x1,y1,z1); printf("%d %d %d\n",x ,y ,z ); //printf("after %d days, there are %d rabbits\n",n,x+y+z); return 0; } 預期的正確結果(Expected Output): 4 2 1 3 3 2 4 錯誤結果(Wrong Output): 4 程式記憶區段錯誤 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) 補充說明(Supplement): 上述為兩段碼,第一段是除錯用的對照,第二段是練習用的兔子增殖問題, 老師講的原理我聽不懂所以就照自己的想法打了這個,想法是東西就照字面 指定對應變數,然後變數的前值就多設一整組變數來抓,可能講得很模糊, 題目的話是這樣: 假設一對小兔子一個月後變中兔子,再一個月變大兔子, 再一個月每對大兔生一對小兔,設兔子不死的n個月後兔子總對數. 然後在驗證for的時候一路除錯結果發現這個, 我搞這個搞了一個下午了其他習題都沒做冏冏冏, 問老師回答是我的變數順序有誤,要設一個temp給xyz用等等... 不過我怎麼想都不對,都特意多一整組變數了怎麼是順序問題冏, 我以後會乖乖照老師的打,可不可以懇請指點我是缺了什麼觀念冏 還有我現在是在資策會上課,用的是講義配蔡明志老師的C Primer Plus, 有沒有再簡單一點的... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.138.249 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1552292791.A.7CD.html
jerryh001: scanf要&a 03/11 16:31
CMJ0121: 查 man : the next pointer must be a pointer to int 03/11 16:32
a75088285: 感謝囧,東改西改結果是這個沒改… 03/11 17:05