请问这段C++程序有什么问题?应该怎么改?

题目描述请编一个程序,可以将英语规则名词由单数变成复数。已知规则如下:(a)以辅音字母y结尾,则将y改成i,再加es;(b)以s、x、ch、sh结尾,则加es;(c)以元... 题目描述

请编一个程序,可以将英语规则名词由单数变成复数。已知规则如下:

(a)以辅音字母y结尾,则将y改成i,再加es;

(b)以s、x、ch、sh结尾,则加es;

(c)以元音字母o结尾,则加es;

(d)其他情况直接加s。

要求用键盘输入英语规则名词,屏幕输出该名词的复数形式。

输入

先输入一个整数n,表示有n个名词(n<100);

此后有n行的字符串,每个字符串表示一个名词(每个名词长度不超过20个字符)。

输出

每行输出一个名词的复数形式。
样例输入

7
false
key
gets
index
getch
ash
supercargo
样例输出

falses
keies
getses
indexes
getches
ashes
supercargoes
我的答案是:
#include<stdio.h>
int main()
{
int n,i,j;
char a[20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
gets(a);
j=strlen(a);
if(a[j-2]=='y')
{
a[j-2]='i';
a[j-1]='e';
a[j]='s';
a[j+1]='\0';
printf("%s",a);
}
else if((a[j-2]=='s')||(a[j-2]=='x')||(a[j-3]=='c'&&a[j-2]=='h')||(a[j-3]=='s'&&a[j-2]=='h')||(a[j-3]=='o'))
{
a[j]='e';
a[j+1]='s';
a[j+2]='\0';
printf("%s",a);
}
else
{
a[j-1]='s';
a[j]='\0';
printf("%s",a);
}
}
return 0;
}
展开
 我来答
百度网友91292b5
2017-11-07 · TA获得超过484个赞
知道小有建树答主
回答量:351
采纳率:72%
帮助的人:96.5万
展开全部

主要有两个问题,gets函数的使用不当和数组下标计算错误,

改正方法如下:

  1. 将gets(a);改为scanf("%s",a);

  2. 将所有的下标加1,例如a[j-2]改为a[j-1]

追问

谢谢你,但是结果还是不对。为什么不能用gets(a)?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式