一道C++题的疑问:??

//设计函数,将小写英文字符变为对应的大写字符。#include<iostream>usingnamespacestd;charcapitalize(charch){if... //设计函数,将小写英文字符变为对应的大写字符。
#include<iostream>
using namespace std;
char capitalize(char ch)
{
if (ch>='a'&& ch<='z')
return ch-32;
else return ch;
}
int main()
{
int i;
char cha[30];
cout<<"请输入一个英文句子"<<endl;
cin.getline(cha,30);
for(i=0;i<30;i++)
{
if(cha[i]!='\0');
cout<<capitalize(cha[i]);
}
cout<<endl;
return 0;
}
为什么输入一些单词,输出后会有好几个中文“烫烫烫”输出呢?
望高手解答。。。。。。。。。。
为了不输出乱码,要怎么更改呢?望高手解答(用for循环,不用while)
展开
 我来答
777999666qhw
推荐于2016-03-03 · TA获得超过4871个赞
知道大有可为答主
回答量:5615
采纳率:25%
帮助的人:4617万
展开全部
#include<iostream>
using namespace std;
char capitalize(char ch)
{
if (ch>='a'&& ch<='z')
return ch-32;
else return ch;
}
int main()
{
int i;
char cha[30];
cout<<"请输入一个英文尘纳句子"<<endl;
cin.getline(cha,30);
for (i=0;i<30;i++) {
if (cha[i]=='\0')//当字谈升符串结束的时候跳出循环派侍没
break;
cout<<capitalize(cha[i]);
}
cout<<endl;
return 0;
}
ahaubit
2010-01-09 · TA获得超过1453个赞
知道小有建树答主
回答量:637
采纳率:0%
帮助的人:766万
展开全部
楼上的改后还是有乱码
原因在这里
char cha[30];

你声明了30个char的数组,
但是如果你在输入的时候,没有输入那么多字母,比如只输入abc,cha数组后慎培燃宽虚面的元素就会存放其他数据(未定义).所以最后会造成输出出中则现乱码.

如果你只输入29个字母,你会发现你的程序其实是对的.完成了小写转化为大写的功能.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
foroo121
2010-01-09 · TA获得超过151个赞
知道答主
回答量:242
采纳率:0%
帮助的人:0
展开全部
这个是因为你定义的答乱伏cha[30]后都有值呢!

使用memset(cha,0,30)之后,后边儿就都致成空的清携了。

一般建立数组的时候,如陪和果需要置空,用这个函数的效率比较高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bbshliu
2010-01-09 · 超过17用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:0
展开全部
for(i=0;i<30;i++)
{
if(cha[i]!='\0'); //这里多了个分号源粗,并雹丛镇且到了0之后你没有break
cout<<capitalize(cha[i]);
}
改成这样:
if (cha[i] == 0)
break;
else
cout<郑脊<capitalize(cha[i]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式