getchar()

macropode

Erfahrenes Mitglied
Hallo ich hätte da ein kleines problem.

Ich lese zeilenweise mit getchar() aus einer textdatei von std-in.
jetzt möchte ich den eingelesenen wert abgleichen ob eine "(" bzw ")" vorhanden ist.

Quelltext:
while ( c != EOF)
{
c = getchar();
}

if ( c == '(')
{
printf("mach irgendwas");
}
else if ( c == ')')
{
printf("mach was anderes");
}
else
{
printf("mach nix");
}


Das Problem was ich habe ist, das das programm immer nur den else zweig durchläuft.

Wo ist mein fehler bitte helft mir!
 
Da ist ein logischer Fehler in deinem Programm. Du musst die Abfragen in die while-Schleife rein setzen, damit sie auch für jedes Zeichen durchlaufen wird. So, wie es im Moment aussieht, wird zuerst das ganze File eingelesen bis zum EOF. Wenn die Abfrage erreicht wird, hat c deshalb immer den Wert EOF.
 
macropode hat gesagt.:
Hallo ich hätte da ein kleines problem.

Ich lese zeilenweise mit getchar() aus einer textdatei von std-in.
jetzt möchte ich den eingelesenen wert abgleichen ob eine "(" bzw ")" vorhanden ist.

Die if Schleife musst du in der while Schleife implementieren. Was bei dir passiert, ist, dass du in der while Schleife solange einen char einliest, bis du das Ende der Datei (EOF) erreichst. Erst dannach gehst du in die if-Schleife und vergleichst mit deinen Klammern. So sollte es funktionieren:

Code:
while ( c != EOF)
   {
   c = getchar();
   if ( c == '(')
      {
      printf("mach irgendwas");
       }
   else if ( c == ')')
      {
      printf("mach was anderes");
      }
   else
     {
     printf("mach nix");
     }
   }
 
Viele Wege führen nach Rom...
Hast du es schon mal mit 'fread()' oder mit 'gets()' probiert?
Wenn du eine komplette Zeile ausliest, dann kannst du auch über die Stringlänge suchen

Code:
len = strlen(line);
for (i=0;i<len;i++)
{
     if(line[i]=="(")
     {
        printf("Gefunden: (");
     } 
     else if (line[i]==")")
     {
        printf("Gefunden: )");
     }
     else
     {
        printf("mach nix");
     }
}

Wie meine Forumskollegen schon angemerkt haben - der Aufbau deiner Kontrollstruktur ist nicht richtig...
 
Zuletzt bearbeitet:
Zurück