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 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建