0

我只想从标准输入读取一个字符,如果它是一个空格,做一些事情,如果它是一个换行符,做一些别的事情。我当前的代码发生的情况是,如果我输入一个空格,然后按 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

为了区分输入的“行”是否为空(仅 a '\n')或输入了实际字符(字符后跟 a '\n'),您可以:

  • 存储以前char从 读取的内容stdin,如果是,'\n'您可以假设输入了一个空行(第一次输入时除外)。如果没有,您仍然在您之前阅读的同一行上。

  • stdin从阅读 a 之后继续阅读,char直到你阅读'\n',这样下次输入时你不会阅读 a '\n',除非输入了空行。

于 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;
}

请注意,在此解决方案中,如果用户输入两个字符后回车,程序将丢弃第二个字符,但处理第一个字符和回车。因此,您可能不仅需要丢弃第二个字符,还需要丢弃整行。

于 2013-05-29T00:57:09.303 回答
0

不确定我是否理解您的问题,但这将打印1if inputcontains ' '(即使'\n'之后有)并且2if inputhas '\n'but no ' '

#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 回答