2017-03-31 3 views
0

入力が端末に直接入力されているときは完全に機能しますが、入力リダイレクト(同じ内容)で使用すると無限ループが作成されます。リダイレクト付きの無限ループですが、通常の入力では正常に動作します

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

をチェックする必要がありますそれが間違っている理由を言う。 –

+0

@StephenRauch編集: –

+1

私は行末があなたの問題だと思うでしょう。 try: 'if(d == '\ n' || d == '\ r' || d == EOF)' –

答えて

1

本当にあなたのプログラムが、端末にループし、pipe入力して、違いがターミナルgetcharブロックに入力を待っているが、pipeであなたがEOFを得るということです。

あなたは 'X'が設定されているか、それがするのは難しいだろう表示されない場合あなたは、あなたが行うことができ、あなたのループの問題を解決するために、各getchar呼び出しの後EOFため

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

今は違いがわかります!お手伝いありがとう。 –

関連する問題