利用內部靜態變數,累加輸入數字直到0結束

Home Home
引用 | 編輯 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
引用 | 編輯 gamewalk
2007-06-27 02:31
5樓
  
你指的怪怪是指什麼? 我剛剛試過你的程式OK阿 @@?
你是輸入哪些數呢? 給一些輸入樣本我試試看...

獻花 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發表的 :
scanf不能輸入空白,所以如果我輸入1234567890輸入到0它不會自動停止算總和,
按enter後出現的sum=1234567890跟輸入的一模ㄧ樣...

我以為你是說要輸入一次加一次(輸入數字按一次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
引用 | 編輯 karen7710
2007-06-28 09:04
8樓
  
謝謝你的解答喔^^ 表情

獻花 x0