2016-08-04 63 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; 
}