C语言编写单数名词转复数函数输入diary无效果问题求助
问题原因
- 直接触发bug的核心原因:
fgets读取输入时会将你按下的换行符\n一并存入数组,你输入diary后,noun数组实际存储的内容是d i a r y \n \0,调用strlen(noun)得到的长度是6,noun[length-1]取到的是换行符\n,根本不等于'y',所以if分支完全没有执行,输出自然和原输入一致。 - 潜在逻辑错误:就算解决了换行符的问题,你在修改字符时反复调用
strlen(noun)是错误的,修改数组内容会改变strlen的返回值,后续的索引计算会完全错位,还会带来数组越界风险。你已经提前计算过length变量,直接用这个固定值做索引即可。 - 注意点:替换y为ies时,要确保你的SIZE宏定义足够大,至少比输入的单词长度多3,否则会出现缓冲区溢出。
修复后代码
void pluralize() { char noun[SIZE]; printf("Please input a noun: "); fgets(noun, SIZE, stdin); int length = strlen(noun); // 移除fgets读取到的末尾换行符 if (length > 0 && noun[length-1] == '\n') { noun[--length] = '\0'; } if (length >= 1 && noun[length-1] == 'y') { // 直接用提前计算好的固定长度做索引 noun[length-1] = 'i'; noun[length] = 'e'; noun[length+1] = 's'; noun[length+2] = '\0'; } printf("The plural of your word is: %s", noun); }
内容的提问来源于stack exchange,提问作者user3402545
相关产品推荐
相关产品推荐

