一道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而且停不下来,是为什么
展开
展开全部
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',也可以用'*'等等的其他字符代替,只是按下回车时,字符只能读取到该符号而已。
展开全部
基本概念没搞清楚,你输入的是一个字符串,用来获取这个字符串的变量是一个字符类型。
这种题用字符数组吧
#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中的很多函数都是这样方式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询