2013-08-21 110 views
4

當輸入字符串超過預定義的限制時,我正面臨fgets的一個小問題。fgets溢出後如何清除輸入緩衝區?

以下面的例子:

for(index = 0; index < max; index++) 
    {printf(" Enter the %d string : ",index+1) 
       if(fgets(input,MAXLEN,stdin)) 
       { 
        printf(" The string and size of the string is %s and %d \n",input,strlen(input) + 1); 
        removeNewLine(input); 
        if(strcmp(input,"end") != 0) 
        { //Do something with input 
        } 
       } 

現在,當我超過長度MAXLEN和輸入字符串,我知道輸入將在MAXLEN追加一個「\ 0」 -1,這將是它。當我嘗試進入未要求即

Output : 
Enter the first string : Aaaaaaaaaaaaaaaaaaaa //Exceeds limit 
Enter the second string : Enter the third string : ....Waits input 

所以第二個字符串時出現的問題,我想我應該清除緩衝區的標準方式在C.它等待,直到我進入

return 

兩次,它第一次被附加到字符串和下一次,期待更多的輸入與另一個返回。 1.是否有任何方法可以在不輸入額外返回的情況下清除緩衝區? 2.我該如何實現相同的錯誤處理?因爲fgets的返回值是非null,而strlen(input)給了我fgets所接受的字符串的大小,應該做什麼?

非常感謝

+0

如果你一直在編輯你的帖子,其他答案將來沒有任何意義。 SO不是針對解決具體問題,而是幫助他人尋找答案。 – P0W

+0

我會恢復它。抱歉! – Hooli

+0

@IDK請不要回復,現在問題似乎你需要什麼... – Gangadhar

回答

4

如果我理解正確的,看起來像你想避免兩次進入新聞界,當輸入的輸入範圍內。

一個解決將是

for(index = 0; index < max; index++) 
{ 
    printf(" Enter the %d th string :",index); 
    // if (strlen(input) >=MAXLEN) 

    if(fgets(input,MAXLEN,stdin)) 
    { 

     removeNewLine(input); 

     if(strcmp(input,"end") != 0) 
     // Do something with input 
      ; 
    } 
    if (strlen(input) == MAXLEN-1) 
     while((ch = getchar())!='\n' && ch != EOF ); 

} 

有了一個限制,即它會再次要求兩次輸入時輸入的字符是完全MAXLEN-2。

或者你可以簡單地使用逐字輸入法來形成你的input

+0

爲我工作!您能解釋限制部分嗎? – Hooli

+0

@IDK,以及你的'MAXLEN'是10,如果你輸入'abcdefgh'和'ENTER',它會再次等待另一個'ENTER' – P0W

+0

這不是,爲什麼它呢?我輸入了一個字符串,如果它的字符串長度等於9,排除了字符串的空字符,那麼字符串可能會溢出。這裏的任何代碼相關問題都與'\ n'有關,這就是爲什麼它不等待?參考上面的代碼。謝謝! – Hooli

3
while ((c=getchar()) != '\n' && c != EOF) 
    ; 

或:

scanf("%*[^\n]%*c"); 
+0

對於@OP:首選閱讀[「如何刷新輸入緩衝區?」](http://faq.cprogramming.com /cgi-bin/smartfaq.cgi?answer=1044873249&id=1043284392) –

+0

我覺得OP已經試過了這個_「//試圖清除緩衝區」_ 而且他想避免兩次輸入按下,當輸入的輸入沒有溢出時 – P0W

+0

這段代碼應該在調用fgets之後移動到*之前,而不是在它之前,並且只應在由'fgets'填充的緩衝區不以'\ n''結尾時調用。 –