2016-09-29 5 views
0

Ich versuche in der Verfassung als Textdatei von der Kommandozeile in mein Programm zu lesen, um die Zeilen in umgekehrter Reihenfolge auszudrucken. Meine for-Schleife sieht wie folgt aus:Zeilen aus einer Textdatei in umgekehrter Reihenfolge drucken

for(int i = 0; i >= 0; i--) { 
    if(strings[i] == '\0') //counts through array until it finds a line break 
    { 
     break; 
    } 
    printf("%s", strings[i]); 
} 

Wenn das Programm läuft, das einzige, was die erste Zeile der Verfassung druckt ist. Wenn ich meine for-Schleife modifiziere, um i zu inkrementieren, läuft das Programm glatt und gibt die Konstitution wie normal aus, und deshalb glaube ich, dass mein gesamtes Problem in dieser for-Schleife zusammengefasst wird. Dies ist der Rest meines Programms als Referenz.

int clearBuffer() { 
    char junk; 
    while((junk = getchar()) != feof(stdin) && junk != '\n'); 
    return 0; 
} 

int getAline(char ** bufferPointer, int * sizePointer){ 
    char * buffer = *bufferPointer; 
    int count = 0; 
    int size = *sizePointer; 
    while(!feof(stdin)){ 
     if(count >= size - 1){ 
      char * tempBuffer = (char *)malloc(size * 10); 
      //strcpy(tempBuffer, buffer); 
      for (int i = 0; i < size; i++){ 
       tempBuffer[i] = buffer[i]; 
       //putchar(tempBuffer[i]); 
      } 
      free(buffer); 
      buffer = tempBuffer; 
      size *= 10; 
     } 
     buffer[count] = getchar(); 

     if(buffer[count] == '\n'){ 
      break;  
     } 
     if(buffer[count] == EOF){ 
      buffer[count] = '\0'; 
      break; 
     } 

     count++; 
    } 
    *bufferPointer = buffer; 
    *sizePointer = size; 
    return count-1; 
    } 

int main(){ 

    char * buffer; 

    char * strings[1000]; 


    int arrayCount =0; 
    int size = 10; 

    while(!feof(stdin)) 
    { 
     buffer= (char*) malloc(size); 
     getAline(&buffer, &size); 

     strings[arrayCount++] = buffer; 
    } 

    for(int i = 0; i >= 0; i--) { 
     if(strings[i] == '\0'){ 
      break; 
     } 
     printf("%s", strings[i]); 
    } 
    return 0; 
} 
+0

'für (int i = 0; i> = 0; i--) {' nur einmal. Start Formular letzte Nummer. – BLUEPIXY

+2

http://stackoverflow.com/questions/5431941/why-is-which-feof-file-always-wrong –

+0

'EOF' ist kein Zeichen. – melpomene

Antwort

1

Machen Sie int i gleich der Anzahl der Zeilen in der Verfassung statt 0, die es tun sollte.

+0

Wenn "i" auf die Anzahl der Zeilen eingestellt ist, springen Sie über das Ende des Strings-Arrays und drucken Unsinn. –

+0

Whoops, na dann denke ich müsste man i = Anzahl der Zeilen - 1. –

3

Wenn Sie die Iterationsrichtung einer Schleife umkehren, müssen Sie auch die Anfangs- und Endwerte umkehren.

for(int i = arrayCount-1; i >= 0; i--) 

Jetzt beginnt diese Schleife am Ende und dann wieder bis zum Anfang des Arrays.

Verwandte Themen