龍之介 发表于 2020-3-9 07:15:54

C语言程序求助

本帖最后由 龍之介 于 2020-3-9 15:42 编辑

#include <stdio.h>
int main()
{
    int i,j;
    for(i=1;i<=4;i++)
       {
            for(j=1;j<=5;j++)
            {
                   printf("*");
            }
            printf("\n");
       }
   return 0;
}
输出的图案是
*****
*****
*****
*****
为什么不是
*****
*****
    *****
      *****      

alexw_h264 发表于 2020-3-9 08:46:04

第一行是从最左边开始输出5个*,然后回车换行后马上输出了一个空格(代码printf("\n");)
第二行接着这个空格继续输出5个*,然后回车换行后也马上输出一个空格,
第三行接着这个空格继续输出5个*,然后回车换行后也马上输出一个空格,行为和第二行完全一样,
第四行也是如此。所以,除了第一行顶格输出外,从第二行开始都是在一个空格之后再输出。

要输出逐次缩进的图案,需要按如下方式,稍作修改即可
#include <stdio.h>
int main()
{
    int i,j;
    for(i=1;i<=4;i++)
       {
            for(j=1;j<=5;j++)
            {
                   printf("*");
            }
            printf("\n");
            for (j = 1; j <= i; j++)
              {
                   printf(" ");
             }
       }
   return 0;
}

兄弟来学习 发表于 2020-3-9 08:51:02

printf("\n");换行后应该从头开始算的吧,所以后面的都是只加了一个空格

良弓无箭 发表于 2020-3-9 08:51:52

因为每次换行之后会自动回到开头,所以空格是一样的,正确代码如下:
#include <stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<=4;i++)
       {
          for(j=1;j<=5;j++)
          {
               printf("*");
            
          }
         printf("\n ");
         
                  for(k=1;k<i;k++)
                  {
                          printf(" ");
                        }       
       }
   return 0;
}

SHRS23 发表于 2020-3-9 08:54:43

每一个\n是回到行首输出,不是回到上一行输出的位置,所以从第二行开始一直都是空两格个

想实现下面的输出需要一个循环单独控制空格的个数
我在你程序上改造了一下

#include <stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<=4;i++)
       {
                         for(k=0;k<=i-1;k++)
            {
                   printf(" ");
            }
            for(j=1;j<=5;j++)
            {
                   printf("*");
            }
            printf("\n");
       }
   return 0;
}
页: [1]
查看完整版本: C语言程序求助