在C

时间:2016-07-24 16:47:28

标签: c

我在下面的循环中得到一个不寻常的输出。在我的编译器中运行时,输出为233445。为什么我在下面的循环中获得此输出? 7将是此循环的唯一合理输出,为什么7语句在循环内部时不能获得printf

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

3 个答案:

答案 0 :(得分: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<4j<3,所以i+j < 4+3并且它意味着i+j<7,所以i+j在循环中不会是7

答案 1 :(得分: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

答案 2 :(得分:0)

是的,printf语句在循环中。要获得7,请在循环后放置{}将其从循环中取出。