如何在C中忽略键盘上的空行

如何在C中忽略键盘上的空行,c,C,在C语言中,从键盘输入数据似乎是一个很小的问题,但我是一个C noob(不过有一些Java背景) 我需要什么:我需要从键盘键入一个int值(然后按Enter键),然后我需要用户只按Enter键而不输入任何内容,然后再键入另一个int(并再次按Enter键) 我能做什么: int a = 0; int b = 0; scanf("%d", &a); skip_line_cool_function(); scanf("%d", &b); printf("You have just e

在C语言中,从键盘输入数据似乎是一个很小的问题,但我是一个C noob(不过有一些Java背景)

我需要什么:我需要从键盘键入一个int值(然后按Enter键),然后我需要用户只按Enter键而不输入任何内容,然后再键入另一个int(并再次按Enter键)

我能做什么

int a = 0;
int b = 0;
scanf("%d", &a);
skip_line_cool_function();
scanf("%d", &b);
printf("You have just entered: &d and &d", a, b);
如你所见,我不知道如何跳过这一行

我所尝试的:scanf输入一个伪C字符串,但正如您所知,当您不输入任何内容时,它会耐心地等待至少输入一些内容


我在谷歌上搜索的内容:我怀疑fgets可以完成这项工作,但老实说,我不知道如何在我的案例中使用它

如果您对用户界面如此严格,用户只需按一次enter键,那么为什么不这样做呢

/* Read first integer */
do {
  if(!fgets(buffer, sizeof buffer, stdin)) break;
} while( last_character_of(buffer) != '\n');
/* Read next integer */
int a = 0;
int b = 0;
scanf("%d", &a);
getchar(); /* this will get the enter pressed after entering a */
getchar(); /* this will get the enter for the blank line */
scanf("%d", &b);
printf("You have just entered: &d and &b", a, b);
此外,您发布的代码片段将导致编译错误
printf()
需要整数格式说明符
%d
才能正常工作。使用以下命令:

printf("You have just entered: %d and %d", a, b);

如果你对用户界面如此严格,用户只需按一次enter键,那么为什么不这样做呢

int a = 0;
int b = 0;
scanf("%d", &a);
getchar(); /* this will get the enter pressed after entering a */
getchar(); /* this will get the enter for the blank line */
scanf("%d", &b);
printf("You have just entered: &d and &b", a, b);
此外,您发布的代码片段将导致编译错误
printf()
需要整数格式说明符
%d
才能正常工作。使用以下命令:

printf("You have just entered: %d and %d", a, b);

如果要控制行,请不要使用
scanf()
;使用
fgets()
sscanf()
。如果使用
scanf()
,则允许用户在数字前输入任意数量的空白,包括换行符。您可以将函数编写为
void skip_line_cool_function(int n){int c;int i=0;while((c=getchar())!=EOF&&i
。您可以将其称为
skip\u line\u cool\u函数(2)跳过两个新行-一个在第一个数字之后,一个用于空白行。用户界面听起来不太令人愉快;强制人们键入空行有点问题。非常感谢:)实际上,这不是UI,我不想深入太多细节,这是一个UVa在线判断问题输入要求(准确地说是793)。我用Java实现了这一点,它看起来或多或少很简单,现在我正在努力提高我的C/C++技能,因为我以后会需要它们;使用
fgets()
sscanf()
。如果使用
scanf()
,则允许用户在数字前输入任意数量的空白,包括换行符。您可以将函数编写为
void skip_line_cool_function(int n){int c;int i=0;while((c=getchar())!=EOF&&i
。您可以将其称为
skip\u line\u cool\u函数(2)跳过两个新行-一个在第一个数字之后,一个用于空白行。用户界面听起来不太令人愉快;强制人们键入空行有点问题。非常感谢:)实际上,这不是UI,我不想深入太多细节,这是一个UVa在线判断问题输入要求(准确地说是793)。我用Java实现了这一点,它看起来或多或少很简单,现在我正努力提高我的C/C++技能,因为我以后会需要它们。你说得对,谢谢,我编辑了它!谢谢你的想法!你说得太对了,谢谢,我编辑了!谢谢你的想法!这
do{…},而
跳过一行
skip\u line\u cool\u函数()
。如果需要中间的一行,则需要它两次。这
do{…},而
跳过一行
skip\u line\u cool\u function()
。如果你需要一条线在中间,你需要它2次。