2016-07-24 8 views
0

以下のループでは異常な出力が得られます。コンパイラで実行すると、出力は233445になります。なぜ私はこのループの出力を下に得ますか? 7はこのループのための唯一の妥当な出力ですが、printfステートメントがループ内にあるときに7を取得しないのはなぜですか?Cで異常なループ出力を取得する

+2

"なぜ' printf'文がループの中に入っているのですか? 'i + 4'と 'j <3'なので、 'i + j <4 + 3 'で' i + j <7'を意味するので、 'i + 。 – MikeCAT

+0

ループの前にiとjの値が1である –

答えて

0

はい、printfステートメントはループ内にあります。 7を取得するには、ループの後に{}を配置してループから取り除きます。

1
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
int i ; 
int j ; 
for(i=1; i<4;i++) 
    for(j=1;j<3;j++) 
     printf("%d",i+j);  
} 

コードは、外側ループをi = 1で3回実行します。それは内部のループに行き、j = 1で始まる2回実行されます。その後、最初のループには2,3、2番目のループには3,4、3番目のループには4,5が出力されます。

わかりやすくするためにカンマを追加し、内部ループが実際に2回実行されることを示しましたが、セパレータや改行を追加しないため、実際の出力は233445です。出力は、ループを使用して、あなたが7たい場合

、試してみてください。

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int i ; 
    int j ; 
    for(i=4; i<5;i++) { // this brace means it contains the inner loop. 
     for(j=3;j<4;j++) { // this inner brace means it contains control of the statement. 
      printf("%d",i+j); // and always remember to indent for your readers 
     } // close the inner brace! 
    } // close the outer brace! 
} // close main brace 

を代わりに、他の人が言及したようにあなたは、ループを使って数字をインクリメントしてみてください、その後、ループの外にそれを印刷することができます。

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int i ; 
    int j ; 
    for(i=1; i<4;i++) { // this brace means it contains the inner loop. 
     for(j=1;j<3;j++) { // this inner brace means it contains control of the statement. 
     } // close the inner brace! 
    } // close the outer brace! 
    printf("%d",i+j); // 7 
} // close main brace 
+0

2つのループの中かっこを追加すると、OP – babon

+0

@babonのほうが簡単になるでしょう。私はこれを付け加えました。 –

6

なぜこのループの出力が下に表示されますか?

グラフを作成すると表示されます。 printf文がループ内にあるとき、私は7を取得しない理由を

i | j | i+j 
--+---+---------------------------- 
1 | 1 | 2 
1 | 2 | 3 
1 | 3 | (get out of the inner loop) 
2 | 1 | 3 
2 | 2 | 4 
2 | 3 | (get out of the inner loop) 
3 | 1 | 4 
3 | 2 | 5 
3 | 3 | (get out of the inner loop) 
4 | - | (get out of the outer loop) 

i<4j<3、そうi+j < 4+3ので、それはそうi+jは、ループ内7ではありません、i+j<7を意味します。

関連する問題