转义字符异常行为:C语言代码输出不符合预期求助
问题分析与解决:重复输出导致的意外结果
你的代码核心问题是对特殊字符做了两次输出:每次匹配到\t、\b或\\时,先通过printf输出转义序列,随后又执行putchar(var)输出原字符,最终导致了多余的内容。
具体问题拆解
- 制表符案例:输入
Hello World(Hello后是制表符)- 代码先执行
printf("\\t")输出\t,接着putchar('\t')输出原制表符,终端将制表符解析为空格,所以最终输出Hello\t World(\t后多了制表符对应的空格)。
- 代码先执行
- 反斜杠案例:输入
Hello\World- 代码先执行
printf("\\")输出一个\,接着putchar('\\')再输出一个\,最终得到Hello\\World。
- 代码先执行
修正方案
你需要确保特殊字符只输出转义序列,原字符不再重复输出。可以用以下两种方式实现:
方案1:使用if-else分支
int main() { int var; while ((var = getchar()) != '\n') { if (var == '\t') { printf("\\t"); } else if (var == '\b') { printf("\\b"); } else if (var == '\\') { printf("\\\\"); // 输出单个\需要两个转义反斜杠 } else { putchar(var); } } putchar('\n'); }
方案2:使用continue跳过原字符输出
int main() { int var; while ((var = getchar()) != '\n') { if (var == '\t') { printf("\\t"); continue; } if (var == '\b') { printf("\\b"); continue; } if (var == '\\') { printf("\\\\"); continue; } putchar(var); } putchar('\n'); }
其他说明
这完全是代码逻辑错误,和gcc编译器无关。你提到的终端制表符空格数不一致是终端自身的制表位设置问题,确实和当前问题没有关联。
内容的提问来源于stack exchange,提问作者A typical nerd
相关产品推荐
相关产品推荐

