2016-02-08 49 views
2
char buf[1024] = {0}; 

    // send a message 
    if(status == 0) { 
     while(1) { 
      printf("Enter message : "); 
      scanf("%1023[^\n]", buf); 
      fflush(stdin); 
      if(strcmp(buf,"quit")==0) 
       break; 
      status = write(s, buf, strlen(buf)); 
      fflush(stdout); 
      memset(buf,0,sizeof buf); 
     } 
    } 

對於我的scanf,我想要空格。但是,如果我運行這部分代碼,「輸入消息:」將處於無限循環。C:scanf上的循環

如果我將scanf更改爲「%s」,只能正常工作,但我無法接受輸入和中間的空格。

任何人都可以幫助發現它是如何投擲無限循環或任何想法來解決這個問題?

+4

不要使用'fflush(標準輸入)',這是爲什麼你使用'write'和'fwrite'未定義行爲 –

+0

? –

+2

我猜想新行保留在緩衝區中,所以後續調用'scanf'時讀取零個字符。 – immibis

回答

3

scanf()只是有太多的方法出錯讀。使用fgets()

char buf[1024] = {0}; 

// send a message 
if(status == 0) { 
    while(1) { 
     printf("Enter message : "); 
     if (fgets(buf, sizeof buf, stdin) == NULL) break; 
     //scanf("%1023[^\n]", buf); 
     //fflush(stdin); 

     buf[strcspn(buf, "\n")] = '\0'; // lop off potential \n 

     if(strcmp(buf,"quit")==0) 
      break; 


     status = write(s, buf, strlen(buf)); 
     // fflush(stdout); 
     memset(buf,0,sizeof buf); 
    } 
} 
+0

謝謝,它完全按照預期工作! :) – python1010101