廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 4620 個閱讀者
04:00 ~ 4:30 資料庫備份中,需等較久的時間,請耐心等候
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
karen7710
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x9
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][求助] 利用內部靜態變數,累加輸入數字直到0結束
題目:
利用內部靜態變數,可以持續累加使用者從鍵盤輸入的數字,直到輸入0結束。
在main()讀入鍵盤輸入的數字,並在另一函式中做累加。
以下的程式跑起來怪怪的,麻煩大大幫我解決, ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:歐洲 | Posted:2007-06-24 21:20 |
gamewalk
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

第一個你用gets來抓數字 , 這應該是有問題的 , 除非你還要再將字串轉數字 , 還有我覺得題目的意思應該是要你把 static int sum 宣告在 addsum 裡面 ,因為他被宣告成靜態後他的生命週期是到這個程式結束時才結束 , 也就是你後來再進來值還會保留著, 也不會被宣告的初值重設 , 一直到你程式結束為止 ...


[ 此文章被gamewalk在2007-06-25 04:06重新編輯 ]


獻花 x0 回到頂端 [1 樓] From:臺灣永大數位動力公司 | Posted:2007-06-25 03:21 |
karen7710
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x9
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你的意思是改成這樣嗎?
改成這樣後程式輸出的總和都是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 回到頂端 [2 樓] From:歐洲 | Posted:2007-06-25 19:24 |
gamewalk
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感覺妳可能還不太了解靜態變數 , 我再你另一篇文章有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 回到頂端 [3 樓] From:臺灣永大數位動力公司 | Posted:2007-06-25 23:07 |
karen7710
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x9
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

跑出來的程式算出來的答案怪怪的,請問大大是哪裡出錯了?
複製程式
#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 回到頂端 [4 樓] From:歐洲 | Posted:2007-06-26 19:25 |
gamewalk
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你指的怪怪是指什麼? 我剛剛試過你的程式OK阿 @@?
你是輸入哪些數呢? 給一些輸入樣本我試試看...


獻花 x0 回到頂端 [5 樓] From:臺灣永大數位動力公司 | Posted:2007-06-27 02:31 |
karen7710
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x9
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

scanf不能輸入空白,所以如果我輸入1234567890輸入到0它不會自動停止算總和,
按enter後出現的sum=1234567890跟輸入的一模ㄧ樣...


獻花 x0 回到頂端 [6 樓] From:歐洲 | Posted:2007-06-27 19:19 |
gamewalk
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用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;
}


[ 此文章被gamewalk在2007-06-27 23:23重新編輯 ]


獻花 x1 回到頂端 [7 樓] From:臺灣永大數位動力公司 | Posted:2007-06-27 23:00 |
karen7710
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x9
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝你的解答喔^^ 表情


獻花 x0 回到頂端 [8 樓] From:歐洲 | Posted:2007-06-28 09:04 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.097087 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言