[软件资料] scanf或者printf常见遇到的问题

[复制链接]
629|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)。
teaccch 发表于 2025-4-16 22:36 | 显示全部楼层
一般来说scanf("%c", &ch); 会读取换行符或空格。在 %c 前加空格,忽略空白字符
一切D都好 发表于 2025-4-17 09:33 | 显示全部楼层
未检查 scanf 的返回值,可能导致程序逻辑错误
canfeil 发表于 2025-4-17 10:15 | 显示全部楼层
printf 的常见问题主要是格式符错误(如 %d 用于打印 float 类型)会导致输出异常。
twinkhahale 发表于 2025-4-17 11:54 | 显示全部楼层
其实printf的默认精度可能不足或过多。指定精度,例如:printf("%.2f", num);(保留两位小数)
pe66ak 发表于 2025-4-17 13:26 | 显示全部楼层
未正确初始化或终止的字符串可能导致未定义行为。我之前在printf上遇到过
清芯芯清 发表于 2025-4-17 14:15 | 显示全部楼层
多线程环境下的输出问题,其实多线程中同时调用 printf 可能导致输出混乱。最后解决可以使用互斥锁(mutex)保护 printf 调用。
eleg34ance 发表于 2025-4-17 18:04 | 显示全部楼层
scanf 和 printf 的换行符处理不一致。明确输入输出的换行符需求,必要时手动添加或清除。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

355

主题

3172

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部