从控制台读取字符
我编写控制台应用程序,为int执行几个scanf,之后,我执行getchar:
int x,y; char c; printf("x:\n"); scanf("%d",&x); printf("y:\n"); scanf("%d",&y); c = getchar();
因此,我得到c = '\n'
,尽管输入是:
1 2 a
这个问题怎么解决?
这是因为scanf
离开了您在输入流中键入的换行符。 尝试
do c = getchar(); while (isspace(c));
代替
c = getchar();
一种在你想要的字符之前清理anyspace并且忽略其余字符的方法是
do { c = getchar(); } while (isspace(opcao)); while (getchar() != '\n');
您可以使用fflush函数清除缓冲区中剩余的任何内容,作为先前命令行输入的后果:
fflush(stdin);
首先, scanf
应该读取scanf("%d\n", &x);
或者。 这应该够了吧。
男人scanf
叫fflush(stdin);
在scanf
之后丢弃scanf
留下的输入缓冲区中任何不必要的字符(如\ r \ n)。
编辑:正如评论中的人提到fflush
解决方案可能有可移植性问题,所以这是我的第二个提案。 根本不要使用scanf
,并使用fgets
和sscanf
组合来完成这项工作。 这是一种更安全,更简单的方法,因为允许处理错误的输入情况。
int x,y; char c; char buffer[80]; printf("x:\n"); if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &x)) { printf("wrong input"); } printf("y:\n"); if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &y)) { printf("wrong input"); } c = getchar();