标题:哪儿错了?
只看楼主
曲终人散
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-12-2
结帖率:100%
已结贴  问题点数:20 回复次数:17 
哪儿错了?
#include<stdio.h>
#include<string.h>
int main(void )
{
 char str[80],ch;
 int i;
 i=0;
 printf("Input a string:");
 ch=getchar();
 while((ch=getchar())!='\n')
  i++;
 if(str[i-1]=='y')
  strcat(str,"es");
 else if(str[i-1]=='s'||str[i-1]=='x'||str[i-1]=='ch'||str[i-1]=='sh')
  strcat(str,"es");
 else if(str[i-1]=='o')
  strcat(str,"es");
 else
  strcat(str,"s");
 return 0;
}
使单词由单数变复数,哪儿错了?

 
  
搜索更多相关主题的帖子: void 单词 include return 
2009-12-23 09:39
functionY
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2009-12-23
得分:1 
ch = getchar();   /只是读取一个字符,当你输入任意字符后,按ENTER键确认输入,ch读取了字符,而'\n'却留在流里。
while((ch = getchar() != '\n'))     /这次读取的正好是'\n',所以循环不会执行,那么i就是一开始的0值。
if(str[i-1]=='y')          /因为没有通过循环,所以i=0,那么数组的下标就为负,编译器提示下标错误。。

不知道我讲的对不对,我也是新手,如果分析有错误,希望大家原谅,这也是我在这个BBS上发的第一个帖。。。如果把i初始化为1,应该能通过编译。。。。

345602733便是我的终身代号。。。
2009-12-23 10:28
磨成大力佛
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-9-28
得分:2 
楼主,这是我给你改的,你对比一下
#include<stdio.h>
#include<string.h>
int main(void )
{
char str[80];
int i;
i=0;
printf("Input a string:");
scanf("%s",str);
for(i=0;str[i]!='\0';i++);
if(str[i-1]=='y')
  {strcat(str,"es");
   printf("%s",str);}
else if(str[i-1]=='s'||str[i-1]=='x'||(str[i-1]=='h'&&str[i-2]=='c')||(str[i-1]=='h'&&str[i-2]=='s'))
  {strcat(str,"es");
  printf("%s",str);}
else if(str[i-1]=='o')
  {strcat(str,"es");
  printf("%s",str);}
else
  {strcat(str,"s");
  printf("%s",str);}
return 0;
}
2009-12-23 10:55
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
得分:0 
以下是引用磨成大力佛在2009-12-23 10:55:26的发言:

楼主,这是我给你改的,你对比一下
#include<stdio.h>
#include<string.h>
int main(void )
{
char str[80];
int i;
i=0;
printf("Input a string:");
scanf("%s",str);
for(i=0;str!='\0';i++);
if(str=='y')
  {s ...
也不对吧

qq7434391
2009-12-23 11:03
functionY
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2009-12-23
得分:1 
回复 2楼 functionY
改过的程序,比以前的要好,但是问题依旧存在,如果程序运行,提示用户输入字符串时,直接输入ENTER,完蛋了。。。还是直接跳过循环,下标错误。。。

345602733便是我的终身代号。。。
2009-12-23 11:04
磨成大力佛
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-9-28
得分:0 
lz,可能咱俩用的编译器不一样吧,我用的是devc++,已经编译通过,得出正确结果。你可以试着用一下devc++,很好用的
2009-12-23 11:34
functionY
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2009-12-23
得分:0 
回复 6楼 磨成大力佛
哥们,这可不是编译通不通过的事了,你试试提示输入字符串时直接按回车,我估计是要出问题的。。。

345602733便是我的终身代号。。。
2009-12-23 11:43
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
得分:7 
这样应该可以了,我在WIN-TC编译的。按照LZ的写法定义一个字符数组str[80]你都没初始化后面怎么能使用这个数组呢?
#include<stdio.h>
#include<string.h>
int main(void )
{
char str[80],ch;
int i;
i=0;
printf("Input a string:");
while((ch=getchar())!='\n')
 {str[i]=ch;
  i++;
  }
if(str[i-1]=='y')
  strcat(str,"es");
else if(str[i-1]=='s'||str[i-1]=='x'||str[i-1]=='ch'||str[i-1]=='sh')
  strcat(str,"es");
else if(str[i-1]=='o')
  strcat(str,"es");
else
  strcat(str,"s");
printf("%s",str);
getch();
return 0;
}


[ 本帖最后由 liangwenbc 于 2009-12-23 12:02 编辑 ]

qq7434391
2009-12-23 11:54
磨成大力佛
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2009-9-28
得分:0 
lz绝对没问题,我自己试着输入了。
2009-12-23 11:59
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
得分:0 
以下是引用磨成大力佛在2009-12-23 11:59:07的发言:

lz绝对没问题,我自己试着输入了。
怎么会没问题呢,数组str内的数据哪来呢,LZ定义了数组还没初始化啊

qq7434391
2009-12-23 12:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294115-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.180329 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved