You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言打印hasSign变量时无法输出换行符的原因及解决方法

问题成因

问题出在printf("%s", hasSign + "\n");这行代码的逻辑错误:

  • "\n"是C语言中的字符串常量,本质是指向换行符存储地址的char*指针
  • 把int类型的hasSign和指针直接相加是指针偏移操作:hasSign为0时,表达式结果就是"\n"的首地址,只会输出换行;hasSign为1时,指针往后偏移1字节,刚好指向字符串末尾的结束符\0,用%s打印这个地址时什么内容都不会输出,自然没有换行
  • 额外的错误点:%s是字符串格式符,不能用来输出int类型的hasSign变量,要输出整数需要用%d格式符
修复方案

直接替换错误的printf行为如下代码即可:

printf("%d\n", hasSign);

该写法用%d匹配int类型的hasSign变量输出数值,同时把换行符直接写在格式串末尾,输出数值后自动完成换行。

额外优化提示:原有代码中的scanf("%s", str)存在缓冲区溢出风险,建议修改为scanf("%49s", str)限制输入长度,避免输入过长字符串导致数组越界

内容的提问来源于stack exchange,提问作者Jbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:45:03