一道C++编程, 问题1:请帮我指出哪里错了运行成功, 问题2:输入后,输出一群a而且停不下来,是为什么?

#include<iostream>usingnamespacestd;intmain(){chars;cin.get(s);while(s!='\0'){if(s=='... #include<iostream> using namespace std; int main() { char s; cin.get(s); while(s!='\0') { if(s=='a'||s=='e'||s=='i'||s=='u'||s=='o') cout<<s; } }运行成功,但输入后,输出一群a而且停不下来,是为什么 展开
 我来答
百度网友3a00d8c64
2016-10-04 · TA获得超过599个赞
知道小有建树答主
回答量:430
采纳率:64%
帮助的人:323万
展开全部

1、严格而言有几个问题。编译器跟进了其中一个。

2、cin.get()方法错误,这个参数表是读入单个字符而不是字符串的。因此只有单个字符的char s;不属于字符串类型。则编译器不会自动为字符尾部添加'\0',所以无限输出a。所以应该选取重载的cin.get(char*,_delim);即下面代码的样子。

3、修改如下:

int main()
{
 char s[10];
 cin.get(s,'\n');
 int i=0;
 while(s[i]!='\0')
 { 
 if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='u'||s[i]=='o')
 cout<<s[i];
 i++;
 }
    return 0;
}

4、另外,被编译器跟进的问题是,缺少return语句。

更多追问追答
追问
请问第六行能改为while(s[i]!='\n')或者第4行改为cin.get(s,'\0')吗
什么时候用‘\n'做限制条件,什么时候用'\0'呢?
追答
实验下:
1、第六行可以这样改。
2、第四行不可以这样改,因为空白字符串自带了一个'\0',如果第四行改成终止符为'\0',那从一开始就不会读。(猜测)
3、关于何时用哪个做限制条件的问题:应付输入到变量时用'\n',读取到变量时用'\0',因为'\n'是不会被保存数组进去的。
4、关于底层字符串(C风格字符串)个人其实了解不算深,毕竟标准库有更好用的C++字符串类型可以使用。
5、毕竟编译器有自己的一套生成办法,正如第四行,不一定需要用'\n',也可以用'*'等等的其他字符代替,只是按下回车时,字符只能读取到该符号而已。
百度网友2018359
2016-10-04 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1438万
展开全部

基本概念没搞清楚,你输入的是一个字符串,用来获取这个字符串的变量是一个字符类型。

这种题用字符数组吧

#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char** argv)
{
char s[10]={"\0"};
scanf("%s",s);
int i,len;
len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u')
{
cout<<s[i];
}
}
return 0;
}
追问
谢谢你的回答,但是我现在的问题是追问在楼上网友回答下面的问题,谢谢
追答
题目在我看来也是理解上有问题,将两个字符串中的元音复制到另一个字符串,意思是要有三个字符串,但是输入样例中又是只输入了一个字符串。
另外我不建议函数返回一个char*. 我认为好的方法是,提供一个buf
如:int func(char* source, char* buf, ....)

处理好的字符串放入buf中。
MSDN中的很多函数都是这样方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式