2016-06-24 10 views
-4

こんにちは私はCの新人ですし、シンプルなプログラムを書いています。私は、ユーザーが間違った選択を選んだ場合は、ここでのコードは、プログラムを再起動します:Cでプログラムを再起動するにはどうしたらいいですか?

#include <stdio.h> 
#include <cs50.h> 
int main(void){ 
    char choices; 
    float math, pc, svt, eng, philo; 
    do { 
     do { 
     printf("Enter your math score: "); 
     math = GetFloat(); 
    } 
    while(math>20 || math<0); 
    do { 
     printf("Enter your pc score: "); 
     pc = GetFloat(); 
    } 
    while(pc>20 || pc<0); 
    do { 
     printf("Enter your svt score: "); 
     svt = GetFloat(); 
    } 
    while(svt>20 || svt<0); 
    do { 
     printf("Enter your eng score: "); 
     eng = GetFloat(); 
    } 
    while(eng>20 || eng<0); 
    do { 
     printf("Enter your philo score: "); 
     philo = GetFloat(); 
    } 
    while(philo>20 || philo<0); 
    printf("Are you pc or sm?\n"); 
    printf("Write 1 for pc. 2 for sm\n"); 
    int choice = GetInt(); 
    if(choice == 1){ 
     float score = (math*7 + pc*7 + svt*7 + eng*2 + philo*2)/25; 
     printf("Your score is %.2f\n", score); 
    } 
    else if(choice == 2){ 
     float score = (math*9 + pc*7 + svt*3+ eng*2 + philo*2)/23; 
     printf("Your score is %.2f\n", score); 
    } 
    else{ 
     printf("You've picked the wrong choice \n"); 

    } 

     printf("Do you want to try it again? (Y/N) "); 
     choices = getchar(); 
     while (choices != '\n' && getchar() != '\n') {}; 
    } while (choices == 'Y' || choices == 'y'); 


} 

だから私はここで何を意味するか、私はプログラムを再起動するために、他のブロック内のコードを挿入し、ユーザーを与えたいです別の時間。私が彼に1または2の間でもう一度選択させることができれば、とてもうれしいでしょう。

あなたに何か提案や改善がありましたら、お気軽にコメントしてください。 感謝:)

+0

http://www.tutorialspoint.com/cprogramming/c_goto_statement.htm –

+0

* *いいえがいない「ユーザーが間違った選択を選んだ場合は、プログラムを再起動します」。あなたは、より良い入力のためにユーザーに再度プロンプトを出したいと思っています。 –

+0

@AlexandruCimpanu 'goto'、本当に? http://stackoverflow.com/questions/46586/goto-still-considered-harmful – Jezor

答えて

2

必要なものは、選択肢コードを囲むdo whileループです:

int choice; 

do { 
    choice = GetInt(); 
    if (choice == 1) { 
     float score = (math*7 + pc*7 + svt*7 + eng*2 + philo*2)/25; 
     printf("Your score is %.2f\n", score); 
    } 
    else if (choice == 2) { 
     float score = (math*9 + pc*7 + svt*3+ eng*2 + philo*2)/23; 
     printf("Your score is %.2f\n", score); 
    } 
    else { 
     printf("You've picked the wrong choice, try again.\n"); 
    } 
} while(choice < 1 || choice > 2) 
+0

プログラムが完璧に働いてくれてありがとう! –

0

あなたは既にもう一度試してループを持っている、あなたはchoiceのために再度ユーザー入力を取得するには、ループを再利用することができます。したがって、ユーザがchoice(1または2以外)を入力した場合、choices = Yを設定してループをやり直すことができます。ユーザーの入力を求めずに

コードは以下のとおりです。

#include <stdio.h> 
#include <cs50.h> 
int main(void) 
{ 
    char choices; 
    float math, pc, svt, eng, philo; 
    do 
    {  
    // Other code here 

    int choice = GetInt(); 
    if(choice == 1){ 
     float score = (math*7 + pc*7 + svt*7 + eng*2 + philo*2)/25; 
     printf("Your score is %.2f\n", score); 
    } 
    else if(choice == 2){ 
     float score = (math*9 + pc*7 + svt*3+ eng*2 + philo*2)/23; 
     printf("Your score is %.2f\n", score); 
    } 
    else{ 
     printf("You've picked the wrong choice \n"); 
     choices = 'Y'; 

    } 

    if ((choice == 1) || (choice == 2)) 
    { 
     printf("Do you want to try it again? (Y/N) "); 
     choices = getchar(); 
     while (choices != '\n' && getchar() != '\n') {}; 
    } 
    } while (choices == 'Y' || choices == 'y'); 
} 
関連する問題