1

チェックがchar型の次のコードがあります

do{
      printf("Do you want to add an edge(n to stop adding)\n");
      check = getchar();
}while(check!='n');

do{
      printf("Do you want to add an edge(n to stop adding)\n");
      scanf("%c",&check);

}while(check!='n');

どちらも同じ出力を生成します

たとえば、r\nの場合はDo you want to add a edgeを 2 回取得し、たとえばtt\nの場合は同じ質問を 3 回取得した後、入力を求めます。

私の質問は、それを回避する方法と、なぜそれが起こっているのですか?

4

3 に答える 3

1

問題を解決するには、次のことを試してください。

void main()
{
    char check;
    char c;
    do
    {
        printf("Do you want to add an edge(n to stop adding)\n");
        check = getchar();
        do { c = getchar(); } while (c != '\n' && c != EOF);  // This gobbles the rest of the chars on stdin
    } while(check != 'n' && check != EOF);
}
于 2012-04-10T21:02:20.700 に答える
1

またはによって無視されないためcheck、 が英数字であることを確認する必要があります。\nscanfgetchar()

do {
    printf("Do you want to add an edge(n to stop adding)\n");
    do
    {
        check = getchar();
    } while (!isalnum(check) && check != EOF);
} while(check!='n');

編集:行の最初の文字だけが必要だったため:

char line[64];
fgets(line, 64, stdin);
check = line[0]; 

checkそれが入力の範囲内にあることを確認するために、まだチェックする必要があります。

于 2012-04-10T20:43:45.040 に答える
0

プログラムのコーディングには、ubuntu で nano コンパイラを使用します。

プログラムは入力を求めますが、入力として必要なのは1桁の数字だけであり、その入力の直後の「通常のプログラム操作」はプログラムを続行する必要があります。

プログラムは、printf(" ") のようにコードに書き留めた次の操作を続行する必要があります。

-----------start-------------

Input : 2 3 4 5 6 7

------------end-----------------

ユーザーに " " (スペース バー) を入力してもらうのではなく、" " (スペース バー) をプログラム自体に組み込みたいと考えています。入力は、ユーザーが次の場合にのみ続行されます --

  1. スペースバーボタンを手動で入力
  2. ENTER ボタンを押す

どちらも私は望んでいません。

于 2012-08-21T13:59:35.540 に答える