0

問題 : 小さい数値を入力から出力に書き換えます。数値 42 を読み取った後、入力処理を停止します。入力時のすべての数値は、1 桁または 2 桁の整数です。

入力: 1 2 88 42 99

出力: 1 2 88

私の解決策:

#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
while(i!=42)
{ 
printf("%d",i);
scanf("%d",&i);
}
return 0;
}

正解:

#include <stdio.h>

int main( void ) {
int i;
while( 1 ) {
    scanf( "%d", &i );
    if( i == 42 ) break;
    printf( "%d\n", i );
}
return 0;
}

入力が 42 の場合、両方のプログラムが終了します。2 つの違いは何ですか?

編集:これはcodereview.stackexchange.comに投稿する必要があることに気付きました。管理者は必要なことをしてください。

4

4 に答える 4

2

多すぎない程度に。私が見る唯一の違いは次のとおりです。

  1. 各数値を出力した後に改行「\n」を出力しません。

  2. コードは完全に「DRY」ではありません (行を繰り返しますscanf("%d",&i);)。

それ以外の場合、それらは (機能的に) 同一です。しかし、私は追加せざるを得ないと感じています:

  • あなたのコードは少し醜いです... 適切なインデントを使用してください!
于 2013-05-31T13:29:21.797 に答える
1

最初のプログラムでは、ユーザーが最初の値を入力した後にサイクルを入力するため、while 条件で値を確認する必要があります。

代わりに、2 番目のプログラムは常にサイクル内で入力をチェックするため、より明確になります。

于 2013-05-31T13:26:35.113 に答える
1

質問自体から、プログラミング コンテストの Web サイトの練習問題の 1 つからのものであると言えます。

これらのサイトは、質問に回答している形式にも一致します。したがって、改行 (\n) が必要です。

于 2013-05-31T13:29:05.220 に答える
0

それらは機能的に同等であり、個人的にはあなたの解決策を非常に好みます。while(1)私を含む一部の人は悪い習慣と見なしています。コードをたどるよりも、1 行を確認するだけで、while ループがいつ終了するかを簡単に確認できます。それ以外の場合のいくつかの違い:

  • コードをインデントする必要がある、または読みにくい
  • 改行を印刷していません ( \n)
于 2013-05-31T13:28:28.700 に答える