C语言编写字符串替换程序时printf输出意外换行如何解决
问题原因
- 你代码中出现的意外换行是
fgets函数的特性导致的:fgets读取输入时会将用户按下回车产生的换行符\n一并存入目标字符串末尾,你读取的str3末尾自带换行符,因此打印str3后会自动换行。 - 你原代码中
strncmp时特意给strlen(str2)减1,本质也是为了跳过str2末尾的换行符,这种处理逻辑不够严谨,也可以同步优化。
修复方案
你只需要在每次fgets读取输入后,手动移除字符串末尾的换行符即可,修改后的完整代码如下:
#include <stdio.h> #include <string.h> int main() { char str1[128], str2[128], str3[128]; for (int i = 0; i < 128; i++) // 初始化字符串 { str1[i] = 0; str2[i] = 0; str3[i] = 0; } printf("Input the first string:"); fgets(str1, 128, stdin); // 移除str1末尾的换行符 str1[strcspn(str1, "\n")] = '\0'; printf("Input the second string:"); fgets(str2, 128, stdin); // 移除str2末尾的换行符 str2[strcspn(str2, "\n")] = '\0'; printf("Input the third string:"); fgets(str3, 128, stdin); // 移除str3末尾的换行符 str3[strcspn(str3, "\n")] = '\0'; if (strncmp(str1, str2, strlen(str2)) == 0) // 无需再手动减1,长度判断更准确 { printf("%s", str3); int RemainingChar = strlen(str1) - strlen(str2); for (int i = 0; i < RemainingChar; i++) { printf("%c", str1[i + strlen(str2)]); // 无需再手动减1,偏移量正确 } // 可选:最后添加换行符让输出排版更规范 putchar('\n'); } return 0; }
验证效果
输入示例和你测试用的内容一致时,输出结果就是你期望的qwefghjkl。
内容的提问来源于stack exchange,提问作者WallBreakerNO4
相关产品推荐
相关产品推荐

