2016-08-26 9 views
1

출력에서 ​​마지막 문자는 인쇄되지 않습니다.2 차원 문자 배열

Input: 3 3 
     abcabcabc 
Expected Output: a b c a b c a b c 
Actual Output: a b c a b c a b 

어디입니까?

#include <stdio.h> 
int main() { 
    int i,j,k,n; 
    char a[3][3],b[3][3]; 
    printf("enter size\n"); 
    scanf("%d %d",&n,&k); 
    printf("enter character \n"); 
    for(i=0;i<n;i++) 
     for(j=0;j<k;j++) 
      scanf("%c",&a[i][j]); 
    printf("\n"); 
    for(i=0;i<n;i++) 
     for(j=0;j<k;j++) 
      printf("%c ",a[i][j]); 
    return 0; 
} 
+0

'scanf '의 반환 값을 항상 확인하십시오. 'if (2! = scanf ("% d % d", & n, & k)) {... 오류 처리 ....}' – 4386427

답변

5

scanf() 호 :

scanf("%d %d",&n,&k); 

는 루프에서 문자를 판독 여기서 후속하여 판독 입력 버퍼에서 개행 문자 (\n)을 남긴다. 따라서 입력이 한 번 줄어 듭니다.

당신은 추가 할 수 있습니다

int c; 
while((c = getchar()) != '\n' && c != EOF); 

scanf("%d %d",&n,&k); 후 그것을 무시. 그러나 일반적으로 scanf()은 이러한 입력 판독에 적합하지 않습니다. 따라서 fgets()을 사용하는 것이 더 나을지도 모릅니다. 관련

: Why does everyone say not to use scanf? What should I use instead?

0
#include <stdio.h> 
int main() { 
    int i,j,k,n; 
    char a[3][3],b[3][3]; 
    printf("enter size\n"); 
    scanf("%d %d",&n,&k); 
    printf("enter character \n"); 
    fflush(stdin); 
    for(i=0;i<n;i++) 
     for(j=0;j<k;j++) 
      scanf("%c",&a[i][j]); 
    printf("\n"); 
    for(i=0;i<n;i++) 
     for(j=0;j<k;j++) 
      printf("%c ",a[i][j]); 
    return 0; 
} 

라이트의 FFLUSH (표준 입력)는 scanf 의해 상기 입력 버퍼에 이전 개행 문자 (\ 않음)를 클리어한다.