从控制台读取字符

我编写控制台应用程序,为i​​nt执行几个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 ,并使用fgetssscanf组合来完成这项工作。 这是一种更安全,更简单的方法,因为允许处理错误的输入情况。

 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();