0

stdin から char を読み込みたいだけです。スペースの場合は何かを行い、改行の場合は別のことを行います。現在のコードで何が起こっているかというと、スペースを入力してから Enter キーを押すと、' ' ケースが満たされますが、これは私が望むものですが、'/n' ケースもその後満たされます。スペースと改行を読みたくありません。気にするのはスペースだけです。これを修正するにはどうすればよいですか? これが私のコードです:

int input = getc(stdin);
switch (input) {
    case 'q':
        return 1;
        break;
    case ' ':
        printLines(fp);
        break;
    case '\n':
        printLine(fp);
        break;
    default:
        getResponse(fp);
        break;
}
4

4 に答える 4

1

以下が への入力であると仮定しますstdin

a\n
b\n
\n
c\n

入力の「行」が空であるか ( のみ'\n')、または実際の文字が入力されたか (文字の後に'\n') を区別するには、次のいずれかを実行できます。

  • からの以前のchar読み取りを保存します。stdinそうであった'\n'場合は、空の行が入力されたと想定できます (初めて入力を取得する場合を除いて)。そうでない場合は、以前読んでいたのと同じ行にいることになります。

  • stdina を読んだ後、を読むcharまで読み続けます。'\n'そうすれば、次に入力を受け取るときに'\n'、空行が入力されない限り a を読みません。

于 2013-05-29T01:02:11.410 に答える
1

ユーザーが提供した各スペースまたは別の行を読んでいる場合q、各文字の後に改行が必要な場合は、文字を解析した後に破棄することを忘れないでください。

int input = getc(stdin);
switch (input) {
    case 'q':
        getc(stdin);
        return 1;
    case ' ':
        getc(stdin);
        printLines(fp);
        break;
    case '\n':
        printLine(fp);
        break;
    default:
        getResponse(fp);
        break;
}

このソリューションでは、ユーザーが 2 文字の後に Enter を入力すると、プログラムは 2 番目の文字を破棄しますが、最初の文字と Enter を処理します。したがって、2 番目の文字だけでなく行全体を破棄する実装が必要になる場合があります。

于 2013-05-29T00:57:09.303 に答える
0

私があなたの問題を理解したかどうかはわかりませんが、含まれている場合(後であったとしても)、含まれているが含まれていない1場合は次のように出力されます。input' ''\n'2input'\n'' '

#include <stdio.h>


int foo() { return 1; }
int bar() { return 2; }

int main()
{
    char input = 'c';

    while(input != ' ' && input != '\n')
        input = getc(stdin);

    (input == ' ') ? printf("%d\n", foo()) : printf("%d\n", bar());

    return 0;
}

最初にスペースで区切られたいくつかの単語を入力し、次にEnter入力に' '.

$ ./a.out 
test test
1
$ ./a.out 
asdsadasdasdasdsadasddsda
2
$ 
于 2013-05-29T01:30:16.093 に答える
-1
scanf("%c\n",&c);
if(c==' ')
{
    //the input was a space
}
if(c=='\n')
{
    //the input was a newline
}
于 2013-05-29T05:58:07.247 に答える