電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
關於C++販賣機問題..

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
恆焱
偶而上來逛逛的過客


註冊時間: 2008-03-15
文章: 5
來自: 地球
0.00 果凍幣

發表發表於: 2008-3-15, PM 5:37 星期六    文章主題: 關於C++販賣機問題.. 引言回覆

代碼:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int a=100,b=200,c=300,d=400,money,choice;
   
    printf("歡迎光您 自動販賣機\n");   
    printf("請投幣=>");
    scanf("%d",&money);
    printf("1.果汁%d\t2.牛奶%d\n",a,b);
    printf("3.熱可可%d\t4.奶茶%d\n",c,d);
    printf("選單\n");
    scanf("%d",&choice);
   
          switch(choice){     
                                     
            case 1:   
            if(money>=a)printf("您的果汁 剩於%d元\n",money-a);       
            if(money<a) printf("錢不夠啦 重新輸入\n");
            break;           
            case 2:
            if(money>=b)printf("您的牛奶 剩於%d元\n",money-b);     
            if(money<b) printf("錢不夠啦 重新輸入\n");     
            break;             
            case 3:
            if(money>=c)printf("您的熱可可 剩於%d元\n",money-c); 
            if(money<c) printf("錢不夠啦 重新輸入\n");         
            break; 
            case 4:
            if(money>=d)printf("您的奶茶 剩於%d元\n",money-d); 
            if(money<d) printf("錢不夠啦 重新輸入\n");       
            break; 

      system("PAUSE");
      return 0;
      }


有2問題一直想不出來

問題1. 我想當我選完我要的飲料找完零錢,
我想要多增加"是否在投一次Y\N"這項內容
當選再投一次這項條件並用剩餘的零錢。

問題2.當我輸入金錢完,跳出選單故意選沒有裡面內容按鍵,
然後再讓我選一次選單。


想唯一方法想用do....while試做,還是沒辦法。

這問題想很久,請幫我解答。

順便做個以上2問題條件解釋@@"
回頂端
檢視會員個人資料 發送私人訊息
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2008-3-15, PM 8:36 星期六    文章主題: Re: 關於C++販賣機問題.. 引言回覆

1.
再投一次要再輸入money嗎?
要的話,就do放到printf("歡迎光臨自動販賣機\n");上面
while放到system("PAUSE");之前
條件就是讀取到的值是Y還是N
剩餘的錢的部份
你就把money-a的值存回money就行了
如:money = money - a;或money -= a;

2.
直接在switch中使用default:就行了
default中看要用goto傳回去或者在printf("選單\n");跟switch外面加個do...while也行
用do...while的話
就多個變數做標籤
default時就讓此標籤符合while重做的條件

ps.你switch跟system("PAUSE");中間少了個右大刮號
縮排部份也有點問題
第一個printf中的字也有錯
還有要記得使用code標籤喔
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
恆焱
偶而上來逛逛的過客


註冊時間: 2008-03-15
文章: 5
來自: 地球
0.00 果凍幣

發表發表於: 2008-3-15, PM 11:15 星期六    文章主題: 引言回覆

原來我第1問題是do{ }while擺錯地方

第2問題原來用goto就可以解決
感謝解答,謝謝指點!!

不過和用剩餘零錢在投這部分看不懂,

還有剛試過設是否在選Y/N這條件,可是我只成功用數字來判別,

不能用英文字元使用,是哪裡有問題?
Rolling Eyes Rolling Eyes
回頂端
檢視會員個人資料 發送私人訊息
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2008-3-16, AM 9:18 星期日    文章主題: 引言回覆

剩餘零錢就是把你剩下的錢回存給money
我不太了解你哪裡不懂
看你要放在printf之前、裡面或之後都行
像是
代碼:
if(money>=a)
{
    money -= a;
    printf("您的果汁 剩於%d元\n",money);   
}

或是
代碼:
if(money>=a)
{
    printf("您的果汁 剩於%d元\n",money -= a );   
}

或者
代碼:
if(money>=a)
{
    printf("您的果汁 剩於%d元\n",money-a);
    money -= a;   
}

都是ok的,你的do...while並沒有跳回到int a=100,b=200,c=300,d=400,money,choice;這行,那麼money自然會維持在最後的值,所以直接扣除不就是剩餘零錢了嗎?
如果你又投了零錢進去,那就多設一個變數暫存一下剩餘零錢,等到scanf完,再加回money就行了。

scanf不能使用英文字母的話,應該是因為你使用%d在讀吧,%d是讀數字的,要讀字元我記得是用%c,要讀字串是用%s。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
恆焱
偶而上來逛逛的過客


註冊時間: 2008-03-15
文章: 5
來自: 地球
0.00 果凍幣

發表發表於: 2008-3-16, PM 2:15 星期日    文章主題: 引言回覆

原來如此,把money-a改money-=a
就可以存回我剩餘金額可以再繼續使用,
原來不能用英文字元原因,因習慣使用%d忘記改%s或%c,
所以沒辦法讀英文字元,終於完全解了,
謝謝您的指導,讓我受益良多。
Laughing Laughing Laughing Laughing
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作