【发布时间】:2017-11-08 20:35:33
【问题描述】:
我想知道如何让scanf 按回车键跳过读取字符...我的代码如下:
#include <stdio.h>
int main(void)
{
int a, status;
char b;
printf("Please enter a positive number immediately"
"followed by at most one lower-case letter:\n\n");
status = scanf("%i%c", &a, &b);
if (status == 1 && getchar() == '\n') {
printf("\nThank you!\n");
}
return 0;
}
当我只输入一个数字而不输入其他内容时,我需要再次按 Enter 以触发scanf 中的%c、&b。如何避免这种情况并让程序只接受 1 个号码以跳转到 printf?
我试过了:
if (status == 1 && getchar() == '\n')
但这行不通。
【问题讨论】:
-
我建议使用
fgets读取整行,然后使用sscanf转换行首的数字,如果有的话。 -
如果
scanf("%i%c"...)成功,它将返回2,而不是1。fgets在这里更有意义。 -
好吧,我才刚开始编程,所以我对 fgets 不熟悉。在这种情况下我将如何使用它?你能把这条线发给我吗?
-
如果您在
scanf()之后添加一行:printf("%d [%c] = %d\n", a, b, status);,对给出的内容进行调试打印,并且如果您输入31作为数字,那么您会看到@987654337 @ 在一行,] = 2在下一行,因为%c会将换行符读取为字符,并且因为scanf()整体将返回 2,因为它成功转换了两个值。如果您使用"%i%[a-z]"作为格式字符串,那么您将在status中返回1,在a中返回31,在b中返回垃圾。
标签: c