如何在消息框上打印长变量(用c ++编写)

时间:2015-08-02 20:26:01

标签: c++ winapi

我写了这段代码来计算希腊入学考试中学生的分数。当程序计算得分并将其保存在变量moria中时,我希望该数字出现在弹出窗口中。

#include <iostream>
#include <windows.h>
using namespace std;
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

计算得分并显示消息框代码的最后一部分是:

mathks= mathk*0.7 + mathkp*0.3 ;
aodes= aode*0.7 + aodep*0.3 ;
fysks= fysk*0.7 + fyskp*0.3 ;
aeps= aep*0.7 + aepp*0.3 ;
ek8eshs= ek8esh*0.7 + ek8eshp*0.3 ;
mathgs= mathg*0.7 + mathgp*0.3 ;
gvp=(mathks+aodes+fysks+aeps+ek8eshs+mathgs)/6 ;
x=mathk*1.3 ;
y=fysk*0.7 ;
moria=(gvp*8+x+y)*100 ;
string moria2 = to_string(moria);
MessageBox(NULL, moria2, "arithmos moriwn", NULL);

要打印一个很长的数字,我想我必须先把它变成一个字符串。但它仍然无法工作,我得到以下错误:

  1. &#39; to_string&#39;未在此范围内宣布
  2. 无法转换&#39; std :: string&#39; to&#39; const CHAR *&#39;争论&#39; 2&#39; to&#39; int MessageBoxA(HWND __ ,const CHAR ,const CHAR *,UINT)&#39;
  3. 由于我最近才开始学习一些关于图形的东西,所以这里可能会有一些非常愚蠢的错误,所以请理解......

2 个答案:

答案 0 :(得分:0)

问题#1:将int转换为std::string

未声明

to_string,因此编译器不知道您要执行的操作。我假设moriaint(或某个数字)。

要将int转换为std::string,您应该看看this question,其中突出了三种很好的方法:atoistd::ostringstream ,最近也是最好的std::to_string(你似乎试图使用它)。

要正确使用std::to_string,您应该写下以下内容:

std::string moria2 = std::to_string(moria);

请注意,std::to_string仅来自C ++ 11,我假设您正在使用它。如果你没有C ++ 11则更喜欢std::ostingstream

std::ostringstream oss;
oss << moria;
std::string moria2 = oss.str();

作为旁注,您应该更倾向于指示性地命名变量,而不仅仅是附加数字。

问题#2:将std::string转换为const char*

你的第二个问题是MessageBox需要const char*作为它的第二个论点,你提供的是std::string(编译器无法隐式转换为);但是,std::string优雅地为您提供了一种方法:std::string::c_str()。因此,您的代码应为:

MessageBox(NULL, moria2.c_str(), "arithmos moriwn", NULL);

或者

MessageBox(NULL, std::to_string(moria).c_str(), "arithmos moriwn", NULL);

值得注意的是两位评论者@πάνταῥεῖ(我的道歉,如果这是不正确的)和@Jonathan Potter首先指出了这一点。

答案 1 :(得分:0)

您似乎未包含<string>,因此未声明to_string()

问题2已经通过上述答案解决了。