4

入力文字列が事前定義された制限を超えると、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 -1 に '\0' を追加することがわかります。要求されていない 2 番目の文字列を入力しようとすると、問題が発生します。

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

だから、Cのように標準的な方法でバッファをクリアする必要があると思いました。入力するまで待機します

return

2回、最初は文字列に追加され、次回は別の戻り値でより多くの入力が期待されます。1.余分なリターンを入力せずにバッファをクリアできる方法はありますか? 2. 同じエラー処理を実装するにはどうすればよいですか? fgets の戻り値は非 null になり、strlen(input) は fgets によって受け入れられる文字列のサイズを教えてくれるので、どうすればよいでしょうか?

どうもありがとう

4

2 に答える 2

4

私の理解が正しければ、入力された入力が範囲内にある場合は、2回入力することを避けたいようです。

回避策は

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 の場合、再度 2 回入力を求めるという制限があります。

またはinput、文字入力を使用して文字を単純に形成することもできます。

于 2013-08-21T06:14:18.277 に答える
3
while ((c=getchar()) != '\n' && c != EOF)
    ;

また:

scanf("%*[^\n]%*c");
于 2013-08-21T04:44:28.587 に答える