2012-04-18 6 views
0

こんにちは、私はプログラミングの新機能です。私は関数がどのように動作しているかを知っていますので、関数内にif & elseステートメントを書く方法を知りたいと思っています。if文を使用した関数

if(year < 1583) //considers if a year input is less than 1583 which is the starting year for this calendar 
    { 
     printf("\n\nPlease select a year after 1583 \n\n"); 
     goto YEAR; 
     system("cls"); 
    } 
    if(Leap_year(year))//if statement calls Leap Year function 
    { 
     printf("\t ======================= \n"); 
     printf("\t* THIS IS A LEAP YEAR *\n");  
     printf("\t ======================= \n\n"); 
    } 
    else { 
     printf("\t ======================= \n"); 
     printf("\t* THIS IS NOT A LEAP YEAR *\n"); 
     printf("\t ======================= \n\n"); 
    } 
+0

私はあなたが 'Console.WriteLine'を探していると思います。 –

+4

なぜこのタグはC#ですか?これは私のCのように見えます... –

+0

申し訳ありませんが、私はC言語の種類と混同しますが、それはCです –

答えて

2

それはCやC#のかどうか、あなたはwhileループを使用してこの問題を解決することができ、次のよう

コードはどんなのgoto文がない可能性があります。

do 
{  
     // You need to prompt for year here. Your code doesn't show how you do that. 
     if (year < 1583) 
     { 
      printf("\n\nPlease select a year after 1583 \n\n"); 
      // Note: The user will never see the printf above if you clear the screen right after 
      system("cls"); 
     } 
} while (year < 1583); 
+0

この部分を関数形式で書くにはどうすればいいですか? if(Leap_year(year))// if文がうるう年関数を呼び出す { printf( "\ t ============== ========= \ n "); printf( "\ t *最近の年です\ n"); printf( "\ t =================== \ n \ n"); } else { printf( "\ t ===================== \ n"); printf( "\ t *これ以上の年はありません* \ n"); printf( "\ t =================== \ n \ n"); –

+0

「関数形式」とはどういう意味ですか?そのコードを別の関数に分けたいのですか? –

0

gotoを削除する - あなたが探しているソリューションは、より多くの機能を使用することです他の

すなわち

if(year < 1583) //considers if a year input is less than 1583 which is the starting year for this calendar 
    { 
      printf("\n\nPlease select a year after 1583 \n\n"); 
      system("cls"); 
    } 
    else 
    { 
.... 
+0

そして入力を再度促す方法は?それでもループ構造が必要です。 –

+0

@EricJ。あなたは 'YEAR'ラベルがどこにあるかについて、さまざまな前提で行動しています。 (私はあなたの推測に同意する傾向があります。) – trutheality

+0

@EricJ - 再プロンプトが必要であるという質問には言及していませんでした。 'YEAR'ラベルとは別の仮定があり、元のコードの形式は、その人が' else'ステートメントを紛失していたことを暗示しています。 –

1

を追加します。

は考えてみましょう:

// year == -1 means there was an error 
int year = -1; 
while (year != -1) 
{ 
    PromptForYear(); 
    year = GetYear(); 
} 

を次のようにこのコードはgetYearメソッドで動作します:

int GetYear() 
{ 
    int year; 
    cin >> year; 

    // check for bad year values 
    if (year < 1583) 
    return -1; 

    return year; 
} 

そしてPromptForYearが

void PromptForYear() 
{ 
    cout << "\n\nPlease select a year after 1583 \n\n"; 
} 

可能性が個人的に私はTryGetYear方法を好むだろう

while (true) 
{ 
    PromptForYear(); 
    if (TryGetYear(&year)) 
    { 
    break; 
    } 
} 

// code for TryGetYear 

bool TryGetYear(int* year) 
{ 
    if (year == null) 
    return false; 

    cin >> *year; 
    if (*year < 1583) 
    return false; 

    return true; 
} 
+0

'break'ステートメントは、(' switch'に入っていない限り)プログラミングクラスにぶち飛ばされます。代わりに 'do {} while 'を使用してください。また、コードを明確にします(余分な 'if'の必要はありません)。 – trutheality

+0

@trutheality yep、私はTAだったし、私はいつもノーブレークの好みが無益だと感じました。 10年後にフィールドで、私はまだこのように感じる。しかし、私は..何でも。 – payo

+0

ループを中断するために 'break'文とは何の関係もありませんが、それらがなければブール型フラグの束を設定する必要があるでしょう。しかし、この場合、' do {} while'は実際にもっとです'break'よりも読みやすい。 – trutheality