2017-03-31 2 views
0

Mein Code funktioniert perfekt, wenn die Eingabe direkt im Terminal ist, aber eine Endlosschleife erstellt, wenn mit Eingabeumleitung (gleichen Inhalt) verwendet.Unendlich Schleife mit Umleitung, aber läuft normal mit normalem Eingang

int main() 
{ 
    int c,d; 
    int x=1; 
    while(x) 
    { 
     c=getchar(); 
     if((c>='A')&&(c<='J')) 
     { 
      d=getchar(); 
      if(d=='\n'||d==EOF) 
      { 
       if(c=='A') 
        x=0; 
      } 

     } 
     if(x) 
     { 
      printf("Invalid Input\n");//this keeps repeatingn 
     } 
    } 
    return 0; 
} 
+1

Wenn Sie zeigen nicht, wie 'X' gesetzt ist, wird es schwer, Sag, warum es falsch ist. –

+0

@StephenRauch bearbeitet :) –

+1

Ich würde vermuten, dass die Zeilenenden Ihr Problem sind. versuche: 'if (d == '\ n' || d == '\ r' || d == EOF)' –

Antwort

1

Wirklich Ihre Programmschleifen in Terminal und mit pipe Eingang, der Unterschied ist, dass in Terminalgetchar Blöcke für die Eingabe wartet aber auf pipe erhalten Sie EOF.

sollten Sie überprüfen, für EOF nach jedem getchar Aufruf, so dass Ihre Schleife Problem zu lösen, die Sie tun könnten,

int main() 
{ 
    int c,d; 
    int x=1; 
    while(x) 
    { 
     c=getchar(); 

     /* EOF check */ 
     if (c == EOF) 
      break; 

     if((c>='A')&&(c<='J')) 
     { 
      d=getchar(); 
      if(d=='\n'||d==EOF) 
      { 
       if(c=='A') 
        x=0; 
      } 

     } 
     if(x) 
     { 
      printf("Invalid Input\n");//this keeps repeatingn 
     } 
    } 
    return 0; 
} 
+0

Ich sehe den Unterschied jetzt! Danke für die Hilfe. –

Verwandte Themen