2016-06-04 18 views
0

Ich versuche, ein Programm zu entwerfen, das unsere Nachricht aufnimmt und eine bestimmte Anzahl von Zeichen in jeder Zeile speichert (was abgeschlossen ist). Nachdem ich die Zeichen in dieser Reihenfolge behalten habe, versuche ich, den ersten Buchstaben jeder Spalte auszudrucken und ihn in einer Zeile auszudrucken und dann in die zweite Spalte zu gehen und diese Zeichen in der nächsten Zeile auszudrucken. Ich bin in der Lage, die erste Spalte mit diesem Code zu drucken, aber ich bin mir nicht sicher, wie Sie in die nächste Spalte wechseln. Irgendwelche Vorschläge?Drucken Sie das erste Wort in jeder Spalte als Zeile.

#include <stdio.h> 
int main(void) 
{ 
int row = 0 ; 
int i = 0 ; 
char message[256] ; 

scanf("%d", &row); 
fgets(message, sizeof(message), stdin) ; 

while(message[i] != '\0') 
{ 
    putchar(message[i]) ; 
    i++ ; 
    if(i % row == 0) 
    { 
     putchar('\n') ; 
    } 
    i=i+row-1; 
} 
return 0; 
} 
+1

Eine Beispielnachricht und welche Ausgabe Sie erwarten, wäre hilfreich. –

+0

Wenn meine Eingabe 3 ist Dies ist ein C-Programm. Thi S i S a C Pro Gra m. Dann erste Zeile ist Tss pgm 2. Zeile sollte h Acrm sein – Harry

+0

Warum ist nicht die letzte Hälfte der Nachricht ('Thi S i S ein C Pro Gra m') in der Ausgabe enthalten? Und ich glaube nicht, dass Sie die zweite Zeile richtig haben; sollte es nicht "h Crr." sein (jedes ist das Zeichen * nach * dem entsprechenden in der ersten Zeile der Ausgabe)? –

Antwort

0

Der korrigierte Code, Ihr Problem zu lösen ist:

#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
int row = 0 ; 
int i = 0 ; 
int j=0,length=0; 
char message[256] ; 
scanf("%d", &row); 
fgets(message, sizeof(message), stdin) ; 
length = strlen(message);//stores the length of the array. 
    for(j=1;j<=row;j++) 
    { 
     while(i < length)//use this condition in the while loop instead of (message[i]!='\0') in this case. 
     { 
      putchar(message[i]) ; 
      i=i+row; 
     } 
     printf("\n"); 
     i=j; 
    }  
return 0; 
} 

Beachten Sie, dass, da Sie ein statisches Array wurden unter Verwendung und die Bedingung (Meldung [i] = '\ 0'!) In der Bei der while-Schleife muss der Code in den meisten Fällen auf ein Array-Element jenseits der Array-Länge zugreifen, das ein undefiniertes Verhalten auslösen könnte. Durch die Verwendung eines dynamischen Arrays oder durch Ändern der Bedingung in der while-Schleife werden solche Fehler verhindert. Darüber hinaus könnte dieses Problem auch gelöst werden, wenn Sie alle Zeilen in einem zweidimensionalen Array gespeichert und dann jede Spalte in einer einzelnen Zeile angezeigt hätten.

Verwandte Themen