我只想从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;
}
答案 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}如果2
有input
但没有'\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
}