急急急~~C语言高手请进

来源:百度知道 编辑:UC知道 时间:2024/06/27 06:52:39
3. 请编写一个程序,可以将英语规则名词单数变成复数。已知规则(不全)如下:
a) 以辅音字母y结尾,则将y改成i,再加es;
b) 以s,x,ch,sh结尾,则加es;
c) 以元音o结尾,则加es;
d) 其他情况直接加s;
要求用键盘输入英语规则名词(假定用户输入的正确的单词),输出该名词的复数形式。
例如:输入:book 输出:books

下面是我的程序:
#include <stdio.h>
void main()
{
char word[100];
int j;
char plus1[]={"es"};
char plus2[]={"s"};
printf("Please input a word:\n");
scanf("%s",word);
for(j=0;j<100;++j)
if(word[j]=='0')
{
if(word[j-1]=='y')
{ word[j-1]='i';
printf("The changed word is:%s%s\n",word,plus1);
}
else if(word[j-1]=='s' || word[j-1]=='x' || (word[j-1]=='h'&&word[j-2]=='c') || (word[j-1]=='h'&&word[j-2]=='s'))
printf("The changed word is:%s%s\n",word,plus1);
else if(word[j-1]=='o')
printf("The cha

if(word[j]=='0') 改成 if(word[j]=='\0') '\0'代表结束

把你的if(word[j]=='0')
改成if(word[j]=='\0')试试
\0才是字符串结束符。

这个程序有几个问题
第一个是像其他人说的那个,‘0’和‘\0’的问题
第二个是循环没有及时结束,结果会莫名其妙的输出很多遍,我建议的解决方法是设置一个标识变量flag,如果所输入单词满足某一情况,并把其变化后输出了之后就用flag停止循环。
还有就是不明白main函数为什么要用void呢~一般都是int的说……
修改后的程序如下:
#include <stdio.h>
int main()
{
char word[100];
int j, flag = 1;
char plus1[]={"es"};
char plus2[]={"s"};
printf("Please input a word:\n");
scanf("%s",word);
for (j=0;j<100;++j)
if (word[j]=='\0' && flag)
{
if (word[j-1]=='y')
{
word[j-1]='i';
printf("The changed word is:%s%s\n",word,plus1);
flag = 0;
}
else if (word[j-1]=='s' || word[j-1]=='x' || (word[j-1]=='h'&&word[j-2]=='c')