2016-08-26 2 views
1

In der Ausgabe wird das letzte Zeichen nicht gedruckt.Zweidimensionales Zeichenfeld

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 

Wo ist c ???

#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

Überprüfen Sie immer den Rückgabewert von 'scanf', z. 'if (2! = scanf ("% d% d ", & n, & k)) {... Fehlerbehandlung ....}' – 4386427

Antwort

5

Dieser scanf() Anruf:

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

hinterlässt ein Neues-Zeile-Zeichen (\n) in dem Eingangspuffer, der durch die nachfolgende gelesen werden, wo Sie Zeichen in Schleife gelesen. Deshalb braucht es eine Eingabe weniger.

können Sie hinzufügen:

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

nach scanf("%d %d",&n,&k); es zu ignorieren. Aber es ist allgemein akzeptiert, dass scanf() für solche Eingabe nicht gut geeignet ist. Also, Sie könnten besser fgets() verwenden und dann analysieren.

Relevant: 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; 
} 

Added fflush (stdin) zurück Neue-Zeile-Zeichen (\ n) in den Eingangspuffer von Scanf zu löschen.