2016-06-13 7 views
1

Ich bin ein Anfänger in C und habe derzeit einige Probleme invovling Zeichen. Ich habe ein Problem, wenn ich versuche, Werte in eine Char-Matrix einzugeben und dann auszudrucken.Char Matrix Probleme in C

Hier ist mein Code:

#include <stdio.h> 
#define N 3 

int main() 
{ 

char arr[N][N]={{0}}; 
int i,j; 

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++){ 
     scanf("%c",&arr[i][j]); 
    } 
} 

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++){ 
     printf("%c",arr[i][j]); 
    } 
} 

return 0; 
} 

Es gibt zwei Zeichen, die am Ende der Ausgabe fehlen.

Ich weiß nicht, was ich falsch mache, und ich möchte meinen Fehler verstehen:

-Ist es eine Art von Problem, die scanf fonction beteiligt? Ich habe schon von dem Puffer gehört, ist das verwandt? Kommt das Problem von dem Moment an, in dem ich Enter drücke?

-Am ich meine Matrix falsch initialisiert?

-ist es besser, getchar() in dieser Situation zu verwenden? Wenn ja, wie kann ich es schaffen, genau N * N Werte einzugeben und nicht mehr?

Vielen Dank. Jordanien.

+0

"Es gibt zwei Zeichen, die am Ende der Ausgabe fehlen." -> posten Sie die Eingabe, die Ausgabe und die erwartete Ausgabe sind nützliche Teile von Post wie diese. – chux

Antwort

5

Sie sollten " %c" verwenden, um char als Eingabe zu akzeptieren. Wenn Sie einen Speicherplatz vor "%c" hinzufügen, verbraucht es white-spaces (Zeilenvorschub, Tabulator, Leerzeichen usw.), die mit vorherigen Eingaben eingegeben wurden.

#include <stdio.h> 
#define N 3 

int main() { 

    char arr[N][N]={{0}}; 
    int i,j; 

    for(i=0;i<N;i++){ 
     for(j=0;j<N;j++){ 
      scanf(" %c",&arr[i][j]); 
      // ^--- the space before %c 
     } 
    } 

    for(i=0;i<N;i++){ 
     for(j=0;j<N;j++){ 
      printf("%c ",arr[i][j]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 

Eingang:

a b c d e f g h i 

können Sie geben auch diese Zeichen nacheinander mit Geben Sie oder Return Taste.

Ausgang:

a b c 
d e f 
g h i 

Sie können auch this Post überprüfen, die das gleiche Problem behebt.

1

Eine andere Möglichkeit dies zu tun .. Hinzufügen getchar(); Anweisung nach der Anweisung scanf().

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++){ 
     scanf("%c",&arr[i][j]); 
     getchar(); 
    } 
} 

getchar() verbraucht neue Zeilen.

1

In diesem Fall geben Sie einfach die 9 Zeichen in Folge ohne drücken Enter-Taste wie

123456789\n 

weil ein Newline-Zeichen setzen, nachdem jedes Zeichen in einem Zeichenindex becuase \n selbst gespeichert sicherlich ein Zeichen ist, das Sie wollen nicht wie diese

1\n2\n3\n4\n5\ 

In obigem Fall nur 5 Zeichen von Benutzer absichtlich genommen würden eingegeben werden.