2013-10-07 2 views
-3

나는 여기에서 문제가있다. 누군가 나를 도와 줄 수 있다면 정말 좋을 것이다. 처음으로이 프로그램을 사용하면 판단력이 떨어집니다. Basic C++ 주사위 게임

#include <cstdlib> 
#include <iostream> 

using namespace std; 
int throw1, throw2, throw3, throw4; 
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=(bet1, bet2, bet3); 
int deposit; 
int account; 

int main(){ 
    int count = 0; 

    while(count < 3){ 

     cin>>deposit; 

     while(deposit>5000 || deposit<0){    //Makes sure so that my deposit is between 0-5000 
      cout<<"deposit failed"<<endl; 
      cin>>deposit; 

     } 
     account = deposit; 
     cout<<"You have deposited" <<deposit<<"Swedish Krona"<<endl; 
     cout<<"and you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 

     if (konto>499){     //Makes sure so that i have the money to bet, and if i dont have the money, i can just put in more 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100, bet2=300, bet3=500"<<endl; 
      cin>>bet1; 
      cin>>bet2; 
      cin>>bet3; 
      account = (deposit - bet); 
      cout<<"you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 
     } 
     else if(account>299){ 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100, bet=300"<<endl;  
      cin>>bet1; 
      cin>>bet2; 
      account =(deposit - bet); 
      cout<<"you have this much cash on your account"<<account<<"Swedish Krona"<<endl; 
     } 
     else if(account>99){ 
      cout<<"please place your bet"<<endl; 
      cout<<"bet1=100"<<endl; 
      cin>>bet1; 
      cout<<"you have placed your bet"<<bet<<"Swedish Krona"<<endl; 
     } 

     while (account<100 || deposit>5000){ 
      cout<<"insufficient funds"<<endl; 
      cin>>deposit; 
      account=deposit; 
     } 

     { 
      cout<<"Throw dice"<<endl; 
      srand(time(0)); 
      Throw1 = rand() % 6 + 1; 
      Throw2 = rand() % 6 + 1; 
      Throw3 = rand() % 6 + 1; 
      Throw4 = rand() % 6 + 1; 
      cout<<"You rolled"<<Throw1<<endl; 
      cout<<"You rolled"<<Throw2<<endl; 
      cout<<"Computer rolled"<<Throw3<<endl; 
      cout<<"Computer rolled"<<Throw4<<endl; 
     } 
    } 
    count++; 

    system ("pause"); 
} 

그래서 여기 일이 어떤 이유로 내가 항상 심지어 유형하지만 bet1 또는 bet2에 500을 내기 때문이다, 그리고 어떻게 그 문제를 해결하는 단서가 없다. 그리고 나서 내 루프 함수 (int count 0; while(count < 3)count++) 아무 것도 누르지 않고 끝없이 루프를 시작합니다. 단지 같은 코드를 사용하여 동일한 루프 기능을 사용하더라도 일부 코드를 입력하는 것입니다. < <이 코드에서 사용하면 잘됩니다. 배수구에, 왜 이런 일이 일어나는지, 아무도 대답 할 수 있다면 감사 할 것입니다. 감사합니다.

+7

변수 이름을 영어로 변경하고 번역 된 주석을 –

+3

으로 변경하면 프로그램 실행시 srand()를 한 번만 호출하면 도움이됩니다. 결코 루프에 넣지 마십시오. – drescherjm

+1

'int bet = (bet1, bet2, bet3)'이 무슨 뜻인지 짐작할 수 없습니다. 변수 및 과제에 대한 기본 사항을 다시 검토해 보시기 바랍니다. – molbdnilo

답변

5

(int count 0; while(count < 3)count++) 코드 아래에 의견이 있으시면 forwhile 루프의 이상한 혼합으로 보입니다. 올바른 루프를 작성하는 방법에 대해서는 C++ 교재/온라인 자습서를 다시 확인하십시오.

while 루프에 표시된 코드에서 count 변수를 수정하지 않습니다. 따라서 루프 앞에 카운트가 < 인 경우 루프가 영원히 반복됩니다. 코드의 들여 쓰기가 실제로 잘못된 것입니다. 코드 재 형식화의 자유를 얻었습니다. 이제 count++ 문이 실제로 루프 while 외부에 있음을 확인해야합니다.

고정 된 횟수만큼 작업을 수행하려면 for 루프를 사용하는 것이 좋습니다. 증가분을 잊어 버리는 것이 더 어렵습니다!

+0

그래, 나도 그걸 보았고, 그래서 그것을 바꿨고, 이제 막대한 돈이 걸렸고, 내가 원하는 루프를 반복했다. 그러나 그것은 내가 베팅을 다시 할 수있게 해줬고, 나는 단지 뭔가를 눌러 그것을 할 수있다. 자동으로 무언가에이 코드를 사용할 때 내기가 잘 작동합니다. – beastmode28

+0

입력 내용과 함께 프로그램 출력을 보여줍니다. 그러면 실제로 일어날 것으로 예상되는 것, 그러면 누군가가 당신을 도울 수 있습니다. – codeling

9
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=(bet1, bet2, bet3) 

마지막 줄은 다음과 같이 평가됩니다 : (100), (300), 쉼표 (500) 결과 (500) 그래서 내기 변수가 항상 500

로 설정 될 것이다 마지막 값이 될 것입니다 표현의 목록을 분리
3

count바깥 쪽 루프가이 아니므로 은 항상이됩니다. (! 적절한 들여 쓰기가 중요하다) 어느 루프 내부 이동 또는 어쩌면 대신 for 루프를 사용하는 기능에

for (count = 0; count < 3; ++count) { ... } 
+0

시도했지만 아무것도하지 않았습니다. happaned – beastmode28

0

조언,

  • 장소 보증금 (insattning)에 대한 프롬프트를
  • bet에 대한 프롬프트를 함수에 넣으십시오.
  • 내기를 요구하기 전에 충분한 돈이 있는지 확인하십시오.
  • 입력을 입력 한 다음 입력을 검증하십시오 내기가 유효한지 아직)
  • 검사 (= 100, = 300, = 500, 베팅이 명확 = konto)
여기

이러한 편의 기능은,

#include <string> 
#include <cstdlib> 
#include <iostream> 

using namespace std; 
int kast1, kast2, kast3, kast4; 
int bet1 = 100; 
int bet2 = 300; 
int bet3 = 500; 
int bet=0; //assignment didn't make sense 
int insattning=0; 
int konto=0; 

//deposit 
int get_insattning() 
{ 
    int good = 0; 
    while(!good) 
    { 
     cout<<"deposit"<<endl; //prompt for deposit 
     cin>>insattning; 
     if(insattning>5000 || insattning<0)//Makes sure so that my deposit is between 0-5000 
     { 
      cout<<"insattning fel, var vänlig och gör rätt denna gången"<<endl; 
     } 
     else good = 1; 
    } 
    cout<<"du har nu satt in" <<insattning<<"kr"<<endl; 
    return insattning; 
} 

아니다 < 100,300 또는 500 또는 3 베팅 중 1 베팅을 원 하든지. 이것은 처음입니다,

//bet 
int get_bet() 
{ 
    int good = 0; 
    int bet; 
    std::string validbets = ""; 
    if(konto<100){ cout<<"you need more money"; return 0; } 
    while(!good) 
    { 
     cout<<"var vänlig och placera ditt bet"<<endl; 
     if(konto>=100){ validbets = "bet1=100"; } 
     if(konto>=300){ validbets += ", bet=300"; } 
     if(konto>=500){ validbets += ", bet=500"; } 
     cout<<validbets<<endl; 
     cin>>bet; 
     if(bet >= konto) { 
      cout<<"you don't have enough money"<<endl; 
      continue; 
     } 
     if (bet==500){     //Makes sure so that i have the money to bet, and if i dont have the money, i can just put in more 
      cout<<"du har så här mycket på kontot nu "<<konto<<" kr"<<endl; 
      good = 1; 
     } 
     else if(bet==300){ 
      cout<<"du har så mycket på kontot nu "<<konto<<" kr"<<endl; 
      good = 1; 
     } 
     else if(bet==100){ 
      cout<<"du har nu bettat "<<bet<<" kr"<<endl; 
      good = 1; 
     } 
     else { 
      cout<<"you must place valid bet"<<endl; 
      continue; 
     } 
    } 
    return bet; 
} 

이제는 게임 플레이가 더 깨끗하고 읽기 쉽습니다.나는

int main() 
{ 
    int count = 0; 
    int bet; 
    srand(time(0)); 
    for(count=0; (count < 3); count++) 
    { 
     konto = get_insattning(); 
     if (konto<100) 
     { 
      cout<<"du har inte nog med pengar, vänligen sätt in pengar"<<endl; 
      continue; 
     } 
     cout<<"och du har så här mycket i ditt konto "<<konto<<" kr"<<endl; 
     bet = get_bet(); 
     //when you bet, reduce konto by bet 
     konto = (konto - bet); 
     { 
      cout<<"slå tärningar"<<endl; 
      kast1 = rand() % 6 + 1; 
      kast2 = rand() % 6 + 1; 
      kast3 = rand() % 6 + 1; 
      kast4 = rand() % 6 + 1; 
      cout<<"Du fick"<<kast1<<endl; 
      cout<<"du fick"<<kast2<<endl; 
      cout<<"datorn fick"<<kast3<<endl; 
      cout<<"datorn fick"<<kast4<<endl; 
     } 

당신은 당신이 원 여부를 결정하기위한 코드를 작성할 필요가, 당신의 메시지는 영어 아니기 때문에, 나는 다음에 무엇을 말할를 읽을 수있는 승리의 조건은 또는 지급, 그리고 모르는 또는 잃어 버렸을 때 konto에 추가하십시오.

 //did you win or lose? 
     //win? add money to konto 
     //lose? you have already deducted from konto 
    } 
    system ("pause"); 
} 

이 제안 사항은 프로그램을 수정하는 데 도움이됩니다.

+0

도움을 주셔서 감사합니다, 단 하나의 문제가 발생, 루프가 끊임없이 간다 – beastmode28

+0

각 루프에서 종료 조건을보세요. 프롬프트 입력을 "quit"또는 "exit"항목으로 대체하는 것을 고려해 볼 수 있습니다. 또는 입력 <0 일 때 종료 하시겠습니까? 오, 그리고 cin에서 EOF (파일 끝)를 확인할 수 있습니다. – ChuckCottrill