我的节目应该
编写一个程序,它根据你的规则取名词并形成复数形式:
打印每个名词及其复数。
它工作正常,当我输入像奶制品这样的字母打印奶牛场时,它会循环并打印dairiesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesesese我希望这是一个我找不到的快速解决方案,有人可以帮助我!
谢谢!
#include <stdio.h>
#include <string.h>
#define max_word 20
/* prototypes */
void pluralize (char word[]);
int main (void)
{
char noun[max_word]; /* stores temporary word entered by user */
printf("Enter a noun in singular form: ");
scanf("%s", noun);
while (strcmp(noun, "done") != 0)
{
pluralize (noun);
printf("The plural form is %s\n", noun);
}
return;
}
void pluralize (char word[])
{
int length;
char noun;
length=1;
length = strlen(word);
if (word[length - 1] == 'y')
{ word[length - 1] = 'i';
word[length] = 'e';
word[length + 1] = 's';
word[length + 2] = '\0';
}
/* if word ends in "s" "ch" or "sh" add "es" */
else if (word[length - 1] == 's' ||
(word[length - 2] == 'c' && word[length - 1] == 'h') ||
(word[length - 2] == 's' && word[length - 1] == 'h'))
{ strcat(word, "es");
}
else
{ strcat(word, "s");
printf("New word is: ", &noun);
}
return;
}
答案 0 :(得分:2)
我假设您希望程序在用户输入文本done
时终止。如果是这样,你需要修复你的循环:
for (;;)
{
printf("Enter a noun in singular form: ");
scanf("%s", noun);
if ((strcmp(noun, "done") == 0)
break;
pluralize (noun);
printf("The plural form is %s\n", noun);
}
当前版本将循环,直到pluralize()
将字符串设置为done
,这将永远不会发生。
作为旁注,您应该使用strncmp()
和strncat()
来避免潜在的缓冲区溢出。这在此类代码中并不重要,但如果您曾经撰写过面向不受信任用户的内容,则可以使用strcmp()
和strcat()
让自己陷入严重的安全漏洞。