Annhyy 2023-10-28 19:22 采纳率: 0%
浏览 70

输出的换行之间隔了很大的距离,有人知道这是为什么吗?

前两天发现了一个很奇怪的问题,就是输出的换行之间隔了很大的间距,想了很久也没想明白。下面的第一种代码运行出来就是没问题的,第二种的换行之间就隔了很大的间距,之前还从来没有遇见这样的问题。
方案一:


#include<stdio.h>
int main()
{
    int n,a,b,j=0,c;
    scanf("%d",&n);
    for(a=1;a<1000;a++)
    {
        b=a;
        c=0;
        while(b>0)
        {
            c+=b%10;
            b=b/10;
        }
        if(c==n)
        {
            printf("%8d",a);
            j=j+1;
            if(j%6==0)
                printf("\n");
        }
    }
    if(j%6!=0)
        printf("\n"); 
    return 0;
}

方案一对应的正确的输出:

img

方案二:

```c
#include<stdio.h>
int main()
{
    int n,a,b,j=0,c;
    scanf("%d",&n);
    for(a=1;a<1000;a++)
    {
        b=a;
        c=0;
        while(b>0)
        {
            c+=b%10;
            b=b/10;
        }
        if(c==n)
        {
            printf("%8d",a);
            j=j+1;
        }
        if(j%6==0)
            printf("\n");
    }
    if(j%6!=0)
        printf("\n"); 
    return 0;
}

方案二对应的错误的输出:

img


两次的代码只有循环中if语句的位置不一样,我认为从逻辑上来讲第二种代码没有问题,但是第二种的输出是错的,有人知道这是为什么吗?

  • 写回答

2条回答 默认 最新

  • 超级小狗 2023-10-28 19:43
    关注
    
    if(j%6!=0)
        printf("\n"); 
    
    

    这个if语句的位置原因吧。第一段代码是在整个循环结束后判断是否需要换行,这意味着如果最后一行不满6个数,则会在最后一个数后面再次换行。而第二段代码是在每输出6个数后就换行,意味着最后一行不足6个数时也会先换行再结束程序。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月28日