2016-10-10 6 views
0

Ich habe ein Problem mit meinem C-Programm, das die in meinem Array buffer[ ] gespeicherte Zeichenfolge nicht ausgibt.printf gibt kein char-Array aus C

Mein Code ist:

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
    int textSize = 20; 

    int index, ch; 
    int count = 0; 
    int upperCount = 0; 
    int lowerCount = 0; 
    char buffer[textSize]; 

    FILE *pToFile = fopen("input.txt", "r"); 

    if (pToFile != NULL) 
    { 
    while (!feof(pToFile)) 
    {  
     /* Read in a single line from "stdin": */ 
     for(index = 0; (index < textSize) && ((ch = fgetc(pToFile)) != EOF) 
         && (ch != '\n'); index++) { 
     if(islower(ch)) 
     { 
      buffer[index] = toupper(ch); 
      count++; 
      upperCount++; 
     } 
     else if(isupper(ch)) 
     { 
      buffer[index] = tolower(ch); 
      count++; 
      lowerCount++; 
     } 
     else 
     { 
      buffer[index] = (char)ch; 
      count++; 
     } 
     } 
    } 
    } 
    fclose(pToFile);  

    /* Terminate string with null characters: */ 
    buffer[index] = '\0'; 

    /* Print output out onto screen */ 
    printf("%s\n", buffer); 
    printf("Read %d characters in total, %d converted to upper-case, %d to lower-case\n", 
          count, upperCount, lowerCount); 
    return 0; 
} 

Die erste printf Aussage nicht gedruckt wird, aber der zweite Fall ist. Bitte könnte jemand helfen zu erklären, warum dies der Fall ist?

+4

[while 'while (! Feof (pToFile))' ist falsch] (http://stackoverflow.com/questions/5431941/while-feof-file-isal-ways-wrong) – Barmar

+0

Was bedeutet die zweite 'printf rief? Ist die Ausgabe von dem, was es sein sollte? Was ist die Eingabe (die Datei)? Und lies bitte [Warum ist "while (! Feof (datei))" immer falsch?] (Http://stackoverflow.com/questions/5431941/why-is-which-feof-file-always-wrong). –

+0

Oh, und Sie sollten wirklich lernen, wie man einen Debugger verwendet, so dass Sie Schritt für Schritt durch den Code gehen und dann in der Lage sind, das Problem selbst leicht zu finden. –

Antwort

1

Das Problem ist Ihre mit Ihren Schleifen, vor allem, dass while (!feof(pToFile)) Schleife.

Nehmen wir an, Ihr Text enthält eine einzelne Zeile mit weniger als 19 Zeichen, die durch einen Zeilenumbruch beendet wird. Das letzte Bit, die Zeile, die in einer neuen Zeile endet, ist wichtig.

Was passiert, wenn Sie die Datei lesen, ist, dass Sie die Newline treffen, brechen Sie die innere for Schleife und Sie sind zurück in der äußeren Schleife. Da wir das Ende der Datei noch nicht übergeben haben, gibt feof(pToFile) false zurück und Sie kehren zu Ihrer for Schleife zurück.

Dieses Mal in der for Schleife das erste Mal, wenn Sie fgetc es nennen werden feststellen, dass Sie am Ende der Datei sind und das Rück EOF und Sie brechen die Schleife aus. Da jedoch Ihr Initialisierungsausdruck in der for-Schleife index = 0 ist, werden Sie die Schleife mit index gleich Null verlassen.

Jetzt ist die Datei an seinem Ende, und feof(pToFile) wird true zurück, und Sie die äußere Schleife verlassen, und Sie dann die Zeichenfolge im Puffer enden mit index Null ist, dh Sie

tun Sie
buffer[0] = '\0'; 

Jetzt habe eine "leere" Zeichenfolge, die du druckst.

Die einfache Lösung? Überspringen Sie die äußere while Schleife, Sie brauchen es nicht.

+0

Vielen Dank! – Zaya