我发现错误是:
_Mycont CXX0030:错误:表达式无法评估,_Mynextiter CXX0030:错误:表达式无法评估,但我仍然不知道如何修复
此程序使用字符串提示符并将“{0}”替换为5.651,将“{1}”替换为3.427,它可以正常工作。
但是,当我将字符串更改为“{0:c}”和“{1:c}”以替换子字符串并将其格式化为货币时,“{0:f}”和“{1:f}” “替换子字符串并将它们格式化为定点表示法,”{0:e}“和”{1:e}“替换子字符串并将其格式化为科学记数法,”{0:i}“和”{1 :i}“替换子字符串并舍入为整数,它们都可以独立工作。
但是当我尝试将它们放入像if(“{0}”)这样的情况时,如果(“{0:c}”)它只能在我寻找“{0}”的任何其他东西时才有效不行。我收到调试错误。我该如何解决这个问题,我做错了什么?提前致谢。
void main()
{
write("The number {0} is greater than {1}.\n", 5.651, 3.427);
}
void write(string prompt, ...)
{
double small, large, temp;
va_list arguments;
va_start(arguments, prompt);
large = va_arg(arguments, double);
small = va_arg(arguments, double);
if(small > large)
{
temp = large;
large = small;
small = temp;
}
if(prompt.find("{0}"))
{
ostringstream a;
a << large;
string arg1 = a.str();
ostringstream s;
s << small;
string arg2 = s.str();
size_t pos = prompt.find("{0}");
prompt = prompt.replace(pos, 3, arg1);
size_t pos2 = prompt.find("{1}");
prompt = prompt.replace(pos2, 3, arg2);
}
else if(prompt.find("{0:c}"))
{
ostringstream a;
a << large;
string arg1 = "$" + a.str();
ostringstream s;
s << small;
string arg2 = "$" + s.str();
size_t pos = prompt.find("{0:c}");
prompt = prompt.replace(pos, 5, arg1);
size_t pos2 = prompt.find("{1:c}");
prompt = prompt.replace(pos2, 5, arg2);
}
else if(prompt.find("{0:e}"))
{
ostringstream a;
a << scientific << large;
string arg1 = a.str();
ostringstream s;
s << scientific << small;
string arg2 = s.str();
size_t pos = prompt.find("{0:e}");
prompt = prompt.replace(pos, 5, arg1);
size_t pos2 = prompt.find("{1:e}");
prompt = prompt.replace(pos2, 5, arg2);
}
else if(prompt.find("{0:f}"))
{
ostringstream a;
a << fixed << setprecision(6) << large;
string arg1 = a.str();
ostringstream s;
s << fixed << setprecision(6) << small;
string arg2 = s.str();
size_t pos = prompt.find("{0:f}");
prompt = prompt.replace(pos, 5, arg1);
size_t pos2 = prompt.find("{1:f}");
prompt = prompt.replace(pos2, 5, arg2);
}
else if(prompt.find("{0:i}"))
{
ostringstream a;
a << (int)large;
string arg1 = a.str();
ostringstream s;
s << (int)small;
string arg2 = s.str();
size_t pos = prompt.find("{0:i}");
prompt = prompt.replace(pos, 5, arg1);
size_t pos2 = prompt.find("{1:i}");
prompt = prompt.replace(pos2, 5, arg2);
}
cout << prompt;
cout << endl;
va_end(arguments);
}
答案 0 :(得分:1)
您的&#34; 中的表达式&#34;条件不是你认为它正在做的事情。见documentation for std::string find function
返回值
第一场比赛的第一个角色的位置。如果未找到匹配项,则函数返回string :: npos。
所以这个
if(prompt.find("{0}"))
应该是
if(prompt.find("{0}") != string::npos)
如果找不到您使用查找查找的字符串文字,查找会返回 string :: npos ,它不等于零,所以 if 评估为 true ,这不是你想要的。同样适用于所有其他 if 条件查找。