2016-07-24 5 views
0

Я получаю необычный выход для цикла ниже. Когда он запускается в моем компиляторе, вывод 233445. Почему я получаю этот вывод для цикла ниже? 7 будет единственным разумным выходом для этого цикла, почему бы мне не получить 7, когда оператор printf находится внутри цикла?Получение необычного выхода контура в C

#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); 
} 
+2

«Почему я не получаю 7, когда инструкция' printf' находится внутри цикла? " Потому что 'i <4' и' j <3', поэтому 'i + j <4 + 3', и это означает' i + j <7', поэтому 'i + j' не будет' 7' внутри цикла , – 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. Он переходит во внутренний цикл и запускается дважды, начиная с j = 1. Затем он печатает 2,3 для первого цикла, 3,4 для второго цикла и 4,5 для третьего цикла.

Я добавил запятые для ясности и чтобы показать, что внутренний цикл действительно работает дважды, но фактический вывод 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

Возможно, добавление фигурных скобок для двух циклов облегчит работу OP – babon

+0

@babon Хорошая идея. Я добавил это. –

6

Почему я получаю этот выход для цикла ниже?

Сделайте диаграмму, и вы увидите.

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) 

почему я не получаю 7 когда printf оператор находится внутри цикла?

i<4 Потому и j<3, так i+j < 4+3 и это означает i+j<7, поэтому i+j не будет 7 внутри цикла.

Смежные вопросы