Hackerrank《Playing With Characters》C语言代码输出异常求助
问题排查与修复
你的代码存在三个核心问题,导致无法正确输出输入的句子:
- 输入缓冲区残留换行符:第一个
scanf("%c", &ch)读取字符后,输入时按下的回车键(\n)会留在输入缓冲区中。后续执行第三个scanf时,会直接读取到这个残留的换行符,导致sen没有读取到目标句子,最终输出未初始化的垃圾值。 - scanf格式字符串错误:第三个
scanf的"%[^\n]s"是错误写法,%[^\n]本身就是完整的格式说明符(用于读取直到换行符为止的字符串),额外的s会导致匹配失败,无法正确读取内容。 - 输出换行符写法错误:代码里
printf中的直接换行是无效语法,必须用转义字符\n表示换行,否则编译器无法正确解析。
修正后的代码
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int main() { char ch, s[50], sen[100]; scanf("%c", &ch); scanf("%s", s); // 跳过缓冲区中残留的空白字符(含换行) scanf(" %[^\n]", sen); printf("%c\n", ch); printf("%s\n", s); printf("%s\n", sen); return 0; }
关键修改说明
- 在第三个
scanf的格式字符串前添加空格:" %[^\n]",空格会自动跳过输入缓冲区中的所有空白字符(换行、空格、制表符等),确保正确读取目标句子。 - 移除第三个
scanf格式字符串末尾多余的s,保留正确的%[^\n]格式。 - 将所有
printf中的换行替换为转义字符\n,保证输出格式符合预期。
用你给出的测试输入运行修正后的代码,会得到与预期一致的输出:
C Hello Hello World
内容的提问来源于stack exchange,提问作者Nobuya
相关产品推荐
相关产品推荐

