作者 主題: 該用甚麼方式宣告?  (閱讀 2715 次)

0 會員 與 1 訪客 正在閱讀本文。

karst124

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
該用甚麼方式宣告?
« 於: 2013-01-08 09:23 »
事情源於小弟實在太悶,寫了以下這個程式
代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int A=3000;//var of moneys
   int B=200;//var of lives
   int C;//var of choice 1
   int D;//var of choice 2
   int E=0;//var of days

   wrong:// goto point of wrong
   printf("Live game, start press 1, end press 0.\n");
   scanf("%d",&C);
   if (C==1)
   {
      printf("The game begins.\n");
      printf("You have $%d and %d lives now.\n",A,B);
      start://start point of goto.
      printf("Please select a move.\n");
      printf("Enter 1 for rest, 2 for working, 3 for having dinner, 4 for end.\n");
      scanf("%d",&D);
      if (D==1)
      {
         printf("Day %d.\n",E+1);
         printf("You've select to rest, you have to pay $100 for rent\n, you will get 5 lives.\n");
         printf("You have $%d and %d lives now.\n",A-100,B+5);
         if (A>=10000&&B>=500)
         {
            printf("You won the game!\n");
            goto end;
            return 0;
         }
         else
         {
         goto start;
         return 0;
         }
      }
      else
      {
         if (D==2)
         {
            printf("Day %d.\n",E+1);
            printf("You've select to working, you have to loss \n10 lives, you will get $200.\n");
            printf("You have $%d and %d lives now.\n",A+200,B-10);
            if (A>=10000&&B>=500)
            {
               printf("You won the game!\n");
               goto end;
               return 0;
            }
            else
            {
            goto start;
            return 0;
            }
         }
         else
         {
            if (D==3)
            {
               printf("Day %d.\n",E+1);
               printf("You've select to having dinner, you have to pay\n$200 for dinner, you will get 20 lives.\n");
               printf("You have $%d and %d lives now.\n",A-200,B+20);
               if (A>=10000&&B>=500)
               {
                  printf("You won the game!\n");
                  goto end;
                  return 0;
               }
               else
               {
               goto start;
               return 0;
               }
            }
            else
            {
               end://goto's point of ending.
               printf("The result you've got is.\n");
               if (A<=1000&&B<=50)
               {
                  printf("Your ranking is: Bad.\n");
                  system("pause");
                  return 0;
               }
               else
               {
                  if (A>=1000&&B<=50)
                  {
                     printf("Your ranking is: Normal.\n");
                     system("pause");
                     return 0;
                  }
                  else
                  {
                     if (A>=10000&&B>=500)
                     {
                        printf("Your ranking is: Great!\n");
                        system("pause");
                        return 0;
                     }
                     else
                     {
                      if (A==3000&&B==200)
                      {
                           printf("Your ranking is: Normal.\n");
                         system("pause");
                         return 0;                     
                      }
                     }
                  }
                }
             }
         }
     }
  }
  else
  {
  if (C==0)
  {
  system("pause");
  return 0;
 
  }
  else
  {
  printf("Entering wrong, enter again.\n");
  goto wrong;
  return 0;
  }
  }
}
但是程式在編譯後數字卻總是停留在同一位置,就是說︰

Live game, start press 1, end press 0.
1
The game begins.
You have $3000 and 200 lives now.
Please select a move.
Enter 1 for rest, 2 for working, 3 for having dinner, 4 for end.
3
Day 1.
You've select to having dinner, you have to pay
$200 for dinner, you will get 20 lives.
You have $2800 and 220 lives now.
Please select a move.
Enter 1 for rest, 2 for working, 3 for having dinner, 4 for end.
3
Day 1.
You've select to having dinner, you have to pay
$200 for dinner, you will get 20 lives.
You have $2800 and 220 lives now.

我想請問到底要如何解決這個問題呢?謝謝各位。 :)

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
Re: 該用甚麼方式宣告?
« 回覆 #1 於: 2013-01-08 09:58 »
事情源於小弟實在太悶,寫了以下這個程式
代碼: [選擇]
                 
                      }
                     }
                  }
                }
             }
         }
     }
  }
呃,這樣寫不會更悶嗎???

您直接的問題來自於您只有在printf()函式裡做加減的動作
所以不會真正改變變數的值
A = A - 100;
這書上應該有教吧

....另外,正確的使用迴圈應該就不會寫得那麼痛苦,別再用goto了

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: 該用甚麼方式宣告?
« 回覆 #2 於: 2013-01-08 10:00 »
只拿變數來用, 不去改變變數的數值, 當然永遠都不會變.

karst124

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
Re: 該用甚麼方式宣告?
« 回覆 #3 於: 2013-01-08 10:28 »
喔……原來這樣啊……
謝謝各位了。
小弟又汲取了一次教訓了。
事情源於小弟實在太悶,寫了以下這個程式
代碼: [選擇]
                 
                      }
                     }
                  }
                }
             }
         }
     }
  }
呃,這樣寫不會更悶嗎???
至於這個嘛,是個壞習慣。
« 上次編輯: 2013-01-08 10:31 由 karst124 »