打印
[软件资料]

scanf或者printf常见遇到的问题

[复制链接]
304|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2025-3-24 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、不关心scanf或者printf中格式串和对应参数类型匹配的问题。例如(假设x, y是double类型,n是int类型)写:

printf("%d, %f", x, n);
scanf("%d %f", &x, &y, &n);
这样可以保证输入输出总出现莫名其妙的问题,而且你和别人都找不到原因。
2、写scanf时,在接收输入值的变量名之前不写&符号。
这样做常常还可以顺便摧毁你所使用的计算机系统,给自己再多找点麻烦,有自制病毒之妙。

使用特权

评论回复
沙发
ewyu| | 2025-4-16 18:49 | 只看该作者
scanf 不会清除输入缓冲区,残留的换行符或空格可能导致后续输入异常。建议使用 fflush(stdin)(不推荐,仅适用于部分编译器,如 Windows)。

使用特权

评论回复
板凳
wamed| | 2025-4-16 20:05 | 只看该作者
可能会遇到格式符错误(如 %d 用于读取 float 类型)会导致未定义行为。

使用特权

评论回复
地板
tiakon| | 2025-4-16 21:14 | 只看该作者
%s 不限制输入长度,可能导致缓冲区溢出。其实后续可以使用宽度限制符,例如:scanf("%19s", buffer);(假设 buffer 大小为 20)。

使用特权

评论回复
5
teaccch| | 2025-4-16 22:36 | 只看该作者
一般来说scanf("%c", &ch); 会读取换行符或空格。在 %c 前加空格,忽略空白字符

使用特权

评论回复
6
一切D都好| | 2025-4-17 09:33 | 只看该作者
未检查 scanf 的返回值,可能导致程序逻辑错误

使用特权

评论回复
7
canfeil| | 2025-4-17 10:15 | 只看该作者
printf 的常见问题主要是格式符错误(如 %d 用于打印 float 类型)会导致输出异常。

使用特权

评论回复
8
twinkhahale| | 2025-4-17 11:54 | 只看该作者
其实printf的默认精度可能不足或过多。指定精度,例如:printf("%.2f", num);(保留两位小数)

使用特权

评论回复
9
pe66ak| | 2025-4-17 13:26 | 只看该作者
未正确初始化或终止的字符串可能导致未定义行为。我之前在printf上遇到过

使用特权

评论回复
10
清芯芯清| | 2025-4-17 14:15 | 只看该作者
多线程环境下的输出问题,其实多线程中同时调用 printf 可能导致输出混乱。最后解决可以使用互斥锁(mutex)保护 printf 调用。

使用特权

评论回复
11
eleg34ance| | 2025-4-17 18:04 | 只看该作者
scanf 和 printf 的换行符处理不一致。明确输入输出的换行符需求,必要时手动添加或清除。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

321

主题

2514

帖子

6

粉丝