EOF Eingabe mit getchar()

Alles was mit C/C++ unter NetBeans zu tun hat

Moderator: wegus

Antworten
xp10r3r
Beiträge: 7
Registriert: 08.07.2018, 16:10

EOF Eingabe mit getchar()

Beitrag von xp10r3r » 09.07.2018, 11:00

Moin,

ich habe eine weitere Frage. In einer anderen Aufgabe soll eine Textanalyse durchgeführt werden. Es kann ein beliebiger Text eingegeben werden, der anschließend über eine WHILE-Schleife und eine SWITCH-Anweisung auf Ziffern, Zeilen, Kleinbuchstaben, usw. analysiert wird. Die Schleife soll so lange laufen, wie das Textende über die Konstante EOF noch nicht erreicht ist.

Mein Problem ist, dass EOF nicht über STRG + Z erkannt wird. Gebe ich bspw. Hallo Welt gefolgt von STRG + Z ein, läuft das Programm weiter.

Viele Grüße

NetBeans
Product Version: NetBeans IDE 8.2 (Build 201609270201)
Updates: NetBeans IDE is updated to version NetBeans 8.2 Patch 2
Java: 1.8.0_101; Java HotSpot(TM) 64-Bit Server VM 25.101-b13
Runtime: Java(TM) SE Runtime Environment 1.8.0_101-b13
System: Windows 10 version 10.0 running on amd64; Cp1252; de_DE (nb)

Compiler
GCC.png
GCC.png (11.17 KiB) 1085 mal betrachtet
Code

Code: Alles auswählen

#include <stdio.h>

/* Hauptfunktion */
void main(void)
{
    int zeichen;
    unsigned int anz_zeilen,
                 anz_woerter,
                 anz_ziffern,
                 anz_kleinbuchst,
                 anz_grossbuchst,
                 anz_sonstige;
    
    /* Initialisierung */
    zeichen = anz_zeilen = anz_woerter = anz_ziffern = anz_kleinbuchst = 
    anz_grossbuchst = anz_sonstige = 0;
    
    printf("Bitte einen Text eingeben. Die Eingabe am Anfang jeder neuen Zeile"
           "mit STRG + Z beenden.");
    
    while (zeichen = getchar() != EOF) {
        switch (zeichen) {
            case '\n': ++anz_zeilen;
            
            case '\t':
                
            case ' ' : ++anz_woerter;
                       break;
                       
            default  : if (zeichen > '0' && zeichen < '9')
                           ++anz_ziffern;
                       else if (zeichen > 'A' && zeichen < 'Z')
                           ++anz_grossbuchst;
                       else if (zeichen > 'a' && zeichen < 'z')
                           ++anz_kleinbuchst;
                       else
                           ++anz_sonstige;
        }
    }
    /* Ausgabe */
    printf("\n\nTextstatistik:");
    printf("\n#Zeilen:\t%u", anz_zeilen);
    printf("\n#Woerter:\t%u", anz_woerter);
    printf("\n#Ziffern:\t%u", anz_ziffern);
    printf("\n#Kleinbuchstaben:%u", anz_kleinbuchst);
    printf("\n#Grossbuchstaben:%u", anz_grossbuchst);
    printf("\n#Sonstige:\t%u", anz_sonstige);
}

Antworten