2016-08-04 26 views
1

我已经编写了代码来打印C模式。我的预期答案与我所得到的答案有很大不同。我对C语言很陌生。我调试了代码,但无法找到错误。请帮我找到错误。我的代码如下。在模式打印程序中出现错误答案

#include <stdio.h> 

int main() 
{ 
    //code 
    int T,i,j; 

    scanf("%d",&T); 

    while(T--) 
    { 
     char str[5]; 
     for(i=0;i<5;i++) 
     { 
      scanf("%c",&str[i]); 
     } 
     printf("\n"); 

     for(j=1;j<=5;j++) 
     { 
      for(i=0;i<5-j;i++) 
      { 
       printf("."); 
      } 
      for(i=0;i<j;i++) 
      { 
       printf("%c",str[i]); 
      } 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

输入到程序如下:
输入:

1 
geeks 

程序的预期的输出如下所示:
预期输出:

....g 
...ge 
..gee 
.geek 
geeks 

的该程序的实际输出如下:
实际输出T:

.... 
... 
g.. 
ge. 
gee 
+1

注意,当你开始读单词“怪才”,你实际上是开始在空间(“‘),这样就可以读取’怪才” 。这就是为什么你的第一组周期不是“... g” – Matthew

+0

'(j = 1; j <5;j++)' -->'for(j = 1;j≤5; j ++)' – LPs

+1

..和'scanf(“ %c“,&str [i]);' - >'scanf(”%c“,&str [i]);' – LPs

回答

3

纠正你的错误代码

#include <stdio.h> 

int main() 
{ 
    //code 
    int T,i,j; 

    scanf("%d",&T); 

    while(T--) 
    { 
     char str[5]; 
     for(i=0;i<5;i++) 
     { 
      scanf(" %c",&str[i]); 
     } 
     printf("\n"); 

     for(j=1;j<=5;j++) 
     { 
      for(i=0;i<5-j;i++) 
      { 
       printf("."); 
      } 
      for(i=0;i<j;i++) 
      { 
       printf("%c",str[i]); 
      } 
      printf("\n"); 
     } 
    } 
    return 0; 
} 
  1. 字符scanf格式说明更改为" %c"消耗'\n'左转进入stdin由第一scanf
  2. 的循环必须环路外5倍,因此条件变更为<=,因为起始值为1
  3. 移动printf("\n");内部for循环。

INPUT

1 
geeks 

OUTPUT

....g 
...ge 
..gee 
.geek 
geeks 

其他测试

INPUT

2 
1234567890 

OUTPUT

....1 
...12 
..123 
.1234 
12345 

....6 
...67 
..678 
.6789 
67890 
+1

对于一个充满不稳定和可疑代码的问题,非常正确的答案。 – user3078414

0

这可以解决你的问题:

int main() 
{ 
//code 
int T,i,j; 
scanf("%d",&T); 
while(T--) 
{ 
    char str[5]; 
    for(i=0; i<5; i++) 
    { 
     scanf(" %c",&str[i]); //first modification 
    } 
    printf("\n"); 

    for(j=1; j<=5; j++) //second modification 
    { 
     for(i=0; i<=5-j; i++) 
     { 
      printf("."); 
     } 
     for(i=0; i<j; i++) 
     { 
      printf("%c",str[i]); 
     } 
    } 
    printf("\n"); 
} 
return 0; 
}