c - 由于 scanf 失败,getchar 无法读取
问题描述
#include <stdio.h>
int main() {
float f;
char s;
if (scanf("%f", &f) == 1) {
printf("%f", f);
}
else {
s = getchar();
printf("'%c'", s);
}
}
这适用于浮点数,当我输入“*”或“/”时。为什么这不适用于“+”和“-”?
./a.out
*
'*'
这是输出,这就是我想要的。但是在'+'的情况下
./a.out
+
'
'
这正在发生,我希望 '+' 成为输出。
似乎 scanf 的失败以某种方式干扰了 getchar()
解决方案
+
是启动浮点值的有效字符,因此scanf
将在失败之前使用它,因为 . 之后没有数字+
。
然后getchar
将读取下一个字符,之后+
是\n
换行符。
如果您想在输入中捕获不是有效浮点值的前导+
(或-
),例如"+\n"
or "-xyz"
,那么您必须将其读取为字符串,然后在之后解析它,例如使用sscanf
,并将其用作字符串如果它不会解析为浮点数。
推荐阅读
- linux-kernel - 使用 Yocto 使用补丁集成内核中的更改
- php - 如何在后端 PHP API 中检查 android 应用内购买订阅是否有效或过期
- javascript - 传递给 useContext 的 useState 不更新状态
- python - 具有像素值列表的图像掩码
- html - 将 PDF 作为表单数据发送 / Integromat Webhook
- flutter - 在 Flutter 中使用 collectionGroup 从 Firestore 中检索数据
- flutter - 在 Flutter 中为 SliverList 添加搜索功能
- python - 并行化令人尴尬的可并行化生成器的简单方法
- bash - Bash对话框功能不显示
- r - 如何在 CentOS 上升级 R