read char from console

喜你入骨 提交于 2019-12-09 02:58:05

问题


I write console application which performs several scanf for int And after it ,I performs getchar :

int x,y;
char c;
printf("x:\n");
scanf("%d",&x);
printf("y:\n");
scanf("%d",&y);
c = getchar();

as a result of this I get c = '\n',despite the input is:

1
2
a

How this problem can be solved?


回答1:


This is because scanf leaves the newline you type in the input stream. Try

do
    c = getchar();
while (isspace(c));

instead of

c = getchar();



回答2:


You can use the fflush function to clear anything left in buffer as a consquence of previous comand line inputs:

fflush(stdin);



回答3:


A way to clean up anyspace before your desired char and just ignore the remaining chars is

do {
    c = getchar();
} while (isspace(c));
while (getchar() != '\n');



回答4:


For a start the scanf should read scanf("%d\n", &x); or y. That should do the trick.

man scanf




回答5:


Call fflush(stdin); after scanf to discard any unnecessary chars (like \r \n) from input buffer that were left by scanf.

Edit: As guys in comments mentioned fflush solution could have portability issue, so here is my second proposal. Do not use scanf at all and do this work using combination of fgets and sscanf. This is much safer and simpler approach, because allow handling wrong input situations.

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


来源:https://stackoverflow.com/questions/8853154/read-char-from-console

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!