读入char并确定是否为空格或换行符C.

时间:2013-05-29 00:49:16

标签: c stdin

我只想从stdin中读取一个char,如果它是一个空格,做一些事情,如果它是换行符,那就做其他事情。我当前代码发生的事情是,如果我输入一个空格,然后点击回车,''的情况就满足了,这就是我想要的,但之后'/ 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 个答案:

答案 0 :(得分: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;
}

请注意,使用此解决方案,如果用户输入两个字符后输入,程序将丢弃第二个字符但处理第一个字符并输入。因此,您可能需要实现丢弃第二个字符而不是整行。

答案 1 :(得分:1)

假设以下是您对stdin的输入:

a\n
b\n
\n
c\n

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

  • 存储上一次char读取stdin,如果是'\n',则可以假设输入了一个空行(第一次输入时有例外) )。如果没有,你仍然和你以前读过的那行一样。

  • 在阅读stdin后继续阅读char,直到您阅读'\n',这样当您下次接受输入时,您将无法阅读'\n'除非输入空行。

答案 2 :(得分:0)

不确定我是否理解了您的问题,但如果1包含input,则会打印' '(即使之后有'\n')且{{1}如果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

' '

答案 3 :(得分:-1)

scanf("%c\n",&c);
if(c==' ')
{
    //the input was a space
}
if(c=='\n')
{
    //the input was a newline
}