一道c语言改错题
编写一个程序,找到输入正文中有元音字母最多的那个单词,输出该单词和它所含元音字母个数(一个单词是由一串不含有空格换行符及制表符的字符组成)我编写的程序如下:#includ...
编写一个程序,找到输入正文中有元音字母最多的那个单词,输出该单词和它所含元音字母个数(一个单词是由一串不含有空格 换行符及制表符的字符组成)
我编写的程序如下:
#include<stdio.h>
main()
{
int maxlong=0,count=0,i;
char c,word[100],wordmax[100];
c=getchar();
while(c!='\0')
{
if(c=='\t'&&c=='\n'&&c==' ')
c=getchar();
for(i=0;c=='\t'&&c=='\n'&&c!='\0'&&c!=' ';i++)
{ word[i]=c;
if(c=='a'||c=='e'||c=='i'||c=='0'||c=='u')
count++;c=getchar();}
word[i]='\0';
if(maxlong<count)
{maxlong=count;for(i=0;word[i]!='\0';i++) wordmax[i]=word[i];}
}
printf("the word whice contains the most vowel is %s",wordmax);
printf("the number of vowels is %d",maxlong);
}
运行时没有错误,就是输入字符是输不完,没办法只有强行关了tc,请各位指点下,谢谢。 展开
我编写的程序如下:
#include<stdio.h>
main()
{
int maxlong=0,count=0,i;
char c,word[100],wordmax[100];
c=getchar();
while(c!='\0')
{
if(c=='\t'&&c=='\n'&&c==' ')
c=getchar();
for(i=0;c=='\t'&&c=='\n'&&c!='\0'&&c!=' ';i++)
{ word[i]=c;
if(c=='a'||c=='e'||c=='i'||c=='0'||c=='u')
count++;c=getchar();}
word[i]='\0';
if(maxlong<count)
{maxlong=count;for(i=0;word[i]!='\0';i++) wordmax[i]=word[i];}
}
printf("the word whice contains the most vowel is %s",wordmax);
printf("the number of vowels is %d",maxlong);
}
运行时没有错误,就是输入字符是输不完,没办法只有强行关了tc,请各位指点下,谢谢。 展开
4个回答
展开全部
getchar()函数最好不要用于字符串的处理,很麻烦且易错
一般字符串的输入用:
scanf("%s",arr); 或者
gets(arr);
我试着改了下你的程序,没有成功,所以另外写了个,可以实现
你题目的要求,由于是初学,高手不要见笑
---------------------------------------------------------
#include<stdio.h>
void main()
{
char x[100],max[100]; //定义两个字符数组
int count,i,maxnum=0;
while(1)
{
count=0;
scanf("%s",x);
for(i=0;x[i]!='\0';i++) //这个循环判断单词中元音字母的个数
{
if(x[i]=='a'||x[i]=='e'||x[i]=='i'||x[i]=='o'||x[i]=='u')
count++;
}
if(maxnum<count) //判断下一个单词元音字母数是否大于max
{
maxnum=count;
for(i=0;x[i]!='\0';i++)
{
max[i]=x[i]; //赋值
}
max[i]='\0';
}
if(getchar()=='\n') //输入回车后所有单词输入结束,开始输出
break;
}
printf("所求单词为:%s\n",max);
printf("元音字母总数:%d\n",maxnum);
}
一般字符串的输入用:
scanf("%s",arr); 或者
gets(arr);
我试着改了下你的程序,没有成功,所以另外写了个,可以实现
你题目的要求,由于是初学,高手不要见笑
---------------------------------------------------------
#include<stdio.h>
void main()
{
char x[100],max[100]; //定义两个字符数组
int count,i,maxnum=0;
while(1)
{
count=0;
scanf("%s",x);
for(i=0;x[i]!='\0';i++) //这个循环判断单词中元音字母的个数
{
if(x[i]=='a'||x[i]=='e'||x[i]=='i'||x[i]=='o'||x[i]=='u')
count++;
}
if(maxnum<count) //判断下一个单词元音字母数是否大于max
{
maxnum=count;
for(i=0;x[i]!='\0';i++)
{
max[i]=x[i]; //赋值
}
max[i]='\0';
}
if(getchar()=='\n') //输入回车后所有单词输入结束,开始输出
break;
}
printf("所求单词为:%s\n",max);
printf("元音字母总数:%d\n",maxnum);
}
展开全部
c=getchar();
while(c!='\0')
这2行改写合成一行,就是
while((c=getchar())!='\0')
如果照你这个执行,他走一步c=getchar(); 获取你第一个填写的字符,然后一直进行该字符的进行下一行的while判断,另外底下部分感觉也有问题,c=getchar(); 这个返回的是一个字符,不是一个字符串,所以你 word[i]=c;这句话没什么意义,
主题部分大概思想你可以参考下:
用getchar获取字符,累加统计元音字母个数,再建个数组存放这个个数,比如num[i],直到遇到空格、换行和制表符时所有的i都i++,空格符之前的字符都存放到wordmax[i]中记录这个单词,最后比较num[i]的字母个数,找到最大的对应那个i,让后输出wordmax[i],这样你的wordmax应该是string型的才对。
while(c!='\0')
这2行改写合成一行,就是
while((c=getchar())!='\0')
如果照你这个执行,他走一步c=getchar(); 获取你第一个填写的字符,然后一直进行该字符的进行下一行的while判断,另外底下部分感觉也有问题,c=getchar(); 这个返回的是一个字符,不是一个字符串,所以你 word[i]=c;这句话没什么意义,
主题部分大概思想你可以参考下:
用getchar获取字符,累加统计元音字母个数,再建个数组存放这个个数,比如num[i],直到遇到空格、换行和制表符时所有的i都i++,空格符之前的字符都存放到wordmax[i]中记录这个单词,最后比较num[i]的字母个数,找到最大的对应那个i,让后输出wordmax[i],这样你的wordmax应该是string型的才对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while后面应该让c=='\0',这样才不能无限循环下去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询