引用 | 編輯
karen7710
2007-06-24 21:20 |
樓主
▼ |
||
x0
題目:利用內部靜態變數,可以持續累加使用者從鍵盤輸入的數字,直到輸入0結束。 在main()讀入鍵盤輸入的數字,並在另一函式中做累加。 以下的程式跑起來怪怪的,麻煩大大幫我解決, .. 訪客只能看到部份內容,免費 加入會員 x0
|
引用 | 編輯
gamewalk
2007-06-25 03:21 |
1樓
▲ ▼ |
第一個你用gets來抓數字 , 這應該是有問題的 , 除非你還要再將字串轉數字 , 還有我覺得題目的意思應該是要你把 static int sum 宣告在 addsum 裡面 ,因為他被宣告成靜態後他的生命週期是到這個程式結束時才結束 , 也就是你後來再進來值還會保留著, 也不會被宣告的初值重設 , 一直到你程式結束為止 ...
x0 |
引用 | 編輯
karen7710
2007-06-25 19:24 |
2樓
▲ ▼ |
你的意思是改成這樣嗎?
改成這樣後程式輸出的總和都是0,應該要怎麼更改呢? 複製程式 #include <stdio.h> #include <stdlib.h> void addsum(int); int main(void) { int a; printf("輸入數字開始計算,輸入0為結束\n"); scanf("%d",&a); addsum(a); system("pause"); return 0; } void addsum(int b) { static int a; int sum=0; while (1) { sum=sum+a; if (a==0) break; } printf("總數為%d\n",sum); } x0 |
引用 | 編輯
gamewalk
2007-06-25 23:07 |
3樓
▲ ▼ |
感覺妳可能還不太了解靜態變數 , 我再你另一篇文章有PO靜態變數累加的程式碼 ,
不過我看我還是再貼一次好了... 複製程式 int AddSumStatic(int Num) //可做累加 { static int Sum = 0; Sum = Sum + Num; return Sum; } int AddSumNotStatic(int Num) //不可做累加 { int Sum = 0; Sum = Sum + Num; return Sum; } 我寫了兩種...你可以先試試看他們的差別...這樣應該比較好懂 還有你while應該是放在主程式那邊,然後while內做scanf 和呼叫 AddSum 這樣才能做重複輸入 以及累加的動作 , 但是要記住要設 while 輸入值不是0 的時候跳出 不然到時候你要結束時只能 直接關閉程式... x0 |
引用 | 編輯
karen7710
2007-06-26 19:25 |
4樓
▲ ▼ |
跑出來的程式算出來的答案怪怪的,請問大大是哪裡出錯了?
複製程式 #include <stdio.h> #include <stdlib.h> void addsum(int); int main(void) { int a; printf("輸入數字開始計算,輸入0為結束\n"); while (1) { scanf("%d",&a); addsum(a); if (a==0) break; } system("pause"); return 0; } void addsum(int a) { static int sum=0; sum=sum+a; printf("sum=%d\n",sum); } x0 |
引用 | 編輯
karen7710
2007-06-27 19:19 |
6樓
▲ ▼ |
scanf不能輸入空白,所以如果我輸入1234567890輸入到0它不會自動停止算總和,
按enter後出現的sum=1234567890跟輸入的一模ㄧ樣... x0 |
引用 | 編輯
gamewalk
2007-06-27 23:00 |
7樓
▲ ▼ |
下面是引用karen7710於2007-06-27 19:19發表的 : 我以為你是說要輸入一次加一次(輸入數字按一次enter算一次),輸入0(按enter後)的時候再跳出, 也就是你輸入1234567890 要變成 1+2+3+4+5+6+7+8+9 嗎? 那你輸入可能要改成getch()...對了 還有一個問題你是每輸入一個字顯示一次sum值,還是要最後輸入完後才顯示sum的值? 我看你給的例子 很像是最後才印出來吧,那應該就是底下這樣吧... 複製程式 #include <stdio.h> #include <stdlib.h> int addsum(int); int main(void) { int a; printf("輸入數字開始計算,輸入0為結束\n"); do { a = getch(); //獲得的是字元碼,所以a裡面放的是字元碼不是數字 if( a >= Ɔ' && a <= Ə' ) //這裡的比較也是介於0~9的字元 { printf("%c",a); addsum( a - Ɔ' ); //因為數字0~9的字元碼是連續的,所以a - Ɔ'就會等於實際數值 } }while( a != Ɔ' ); printf("\nsum=%d\n",addsum(0)); system("pause"); return 0; } int addsum(int a) { static int sum=0; sum=sum+a; return sum; } x1 |