qq_34094967 2016-10-09 06:04 采纳率: 0%
浏览 1176

C++程序输出中文大写数字乱码问题

程序是用Codeblocks写的,具体如图。请指教!图片说明
附上程序源码
#include
#include
#include

using namespace std;

string getNum(){
string s;
cout<<"请输入一个大于0且不大于15位的有效数字,保留两位小数:"< cin>>s;
cin.clear();
return s;
}

bool checkNum(string s){
int n=s.length();
double m=atof(s.c_str());
if(n0)
return true;
else
return false;
}

string chinese(int flag,string s){
int slength=s.length();
string letter[]={"零""壹""贰""叁""肆""伍""陆""柒""捌""玖"};
string unit[]={"元""拾""佰""仟""万""拾""佰""仟""亿""拾""佰""仟""万"};
string small[]={"角""分"};
string sc="";
int i=0;
for(i;i<slength;i++){
if(flag==1)
sc=sc+letter[s.at(i)-48]+unit[slength-i-1];
else sc=sc+letter[s.at(i)-48]+small[slength-i-1];
}
return sc;
}

string turnNum(string s){
double m=atof(s.c_str());
int dec,sign;
s=fcvt(m,2,&dec,&sign);
string onlyint=s.substr(0,s.size()-2);
string onlysmall=s.substr(s.size()-2,s.size());
string partint=chinese(1,onlyint);
string partsmall=chinese(2,onlysmall);
s=partint+partsmall;
return s;
}

int main()
{
cout << "\n*****将数字转换成中文金额大写*****\n" << endl;
while(1){
string s=getNum();
if(checkNum(s)){
s=turnNum(s);
cout<<"转换为中文后为:"<<s<<endl;
break;}
else
cout<<"输入错误!请重新输入"<<endl;

}

}

  • 写回答

5条回答 默认 最新

  • robin8624 2016-10-09 06:46
    关注

    不是乱码问题,是内存分配问题。
    letter、unit、small在string chinese(int flag,string s)函数中,调用结束这些数据就被析构了。。把这些放全局内存中吧。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog