2013-05-11 81 views
3

我寫了一個簡單的,交互式的程序,期望用戶輸入。 在讀取特定輸入之後,它會執行特定操作,但首先會檢查用戶是否通過從流中讀取任何剩餘字符來輸入過多命令。如果沒有東西可讀,如何跳過getchar()?

我的問題是:如果沒有留下流中的字符,它會卡住,直到用戶按下Enter鍵。有沒有辦法來覆蓋這個?

這是檢查遺留的輸入流中字符的功能:

int check_end_of_stream(void){ 
    char c; 
    c=getchar(); 
    for(; c!='\n' && c!=EOF; c=getchar()) 
     if(c!=' ' || c!=','){ 
      printf("You have written too many statements"); 
      printf(" in your command line!\n"); 
      return 0; 
     } 
    return 1; 
} 

預先感謝您!

P.S.我編程在Linux中

+1

你需要超時機制,使用'閱讀()''而不是getchar()' – 2013-05-11 06:09:44

+1

閱讀此:[getchar()non-blocking](http://cboard.cprogramming.com/c-programming/130243-non-blocking-getchar.html)將幫助您的 – 2013-05-11 06:12:37

+1

有辦法做它,但沒有標準的方法來做到這一點。 Unix上的方式與Windows上的方式不同,因此至少應該指定要處理的系統。對於Unix,您可能會查看_curses_庫或非阻塞I/O選項,並且可能還有一些其他技術,例如超時。 – 2013-05-11 06:18:19

回答

0

另一種解決方案是使用getche()方法,這將不會等待進入被按下...

int check_end_of_stream(void){ 
char c; 

for(c=getche(); c!='\n' && c!=EOF; c=getche()) 
if(c!=' ' || c!=','){ 
    printf("You have written too many statements"); 
    printf(" in your command line!\n"); 
    return 0; 
} 
return 1; 
} 
+0

什麼庫是getche()? – AYR 2013-05-11 06:36:06

+0

使用這個** conio.h ** – avni 2013-05-11 06:52:35

+0

@AYR:這是工作.... – avni 2013-05-11 07:23:01

相關問題