3

入力呼び出しに続いて、stdin ストリームの Enter キーまたは文字が台無しになるという問題があります。

入力呼び出しが 1 つあるとしましょう。ただし、次の入力呼び出しの入力として Enter キーを使用します。

C ++ではcin.ignore()、トリックを行う必要があると思います。

Cバージョンしか見つかりません。

入力方法はgetchar()gets()です。

これが重複している場合は申し訳ありません。私に一致する質問が見つかりませんでした。助けてくれてありがとう!

        printf("Do you want to view the lines? ");
    int choice = getchar();
    while (choice == 'y')
    {
            char line[80];
            printf("What line do you want to see? ");
            gets(line);
            if (line != "all")
            {
                    n = atoi(line);
                    printf("Line %d: %s\n",n,list[n]);
            }
            else
                    for (int i = 0; i<size; i++)
                            printf("%s \n",list[i]);
            printf("Any more lines? ");
            choice = getchar();
    }

これは非常に基本的なことですが、まだ学習していることは認めます。

4

1 に答える 1

4

getcharストリームから不要な文字を消費するには、呼び出しを続ける必要があります。追加の文字が常に 1 つあることがわかっている場合は、 を 1 つ追加で呼び出すだけgetcharです。

ストリームから複数の文字を削除したい場合、または入力に実際に必要なものが含まれている可能性がある状況に対処したい場合は、choice = getchar().

do
{
  choice = getchar();
} while(choice=='\n'); // Add any other characters you may want to skip

これにより、文字が削除され続けますが (この場合は改行の場合のみ)、選択項目は削除されていない最初の文字に設定されたままになります。

ところで、そのような文字列を比較することはできません ( != "all") C の文字列比較関数を使用しますstrcmp()

より一般的には、C++ istream ignore は、以下のコードのようなものとして C で大まかに書くことができます。with を呼び出してstdin、標準入力から文字をスキップします。

int ignore(FILE *stream, int n, int delim)
{
  int c;
  while(n>0)
  {
    c = getc(stream);
    if(c==EOF || c==delim)
    {
      return c;
    }
    n--;
  }
  return(c);
} 
于 2013-02-04T06:30:07.517 に答える