2 qq 32756899 qq_32756899 于 2016.05.05 18:15 提问

C++编译通过但是cmd窗口不显示程序直接退出了

应该跟添加getchar() system(“pause”)什么的没有关系

 //MyRectangle.h
#pragma once
#include"Screen.h"
class MyRectangle
{
public:
 MyRectangle();
 MyRectangle(int x1, int y1, int x2, int y2, Screen* screen);
 void setCoordinations(int x1, int y1, int x2, int y2);
 void setScreen(Screen& screen);
 void Draw();
private:
 int x1_;
 int x2_;
 int y1_;
 int y2_;
 Screen* screen_;
};

//Screen.h
#pragma once
class Screen
{
public:
 void exitWhenInvalidScreen(int x, int y);
 int getWidth();
 int getHeight();
 int setWidth(int width);    //return width
 int setHeight(int height);  //return height
 Screen();
 Screen(int, int);
 //~Screen();
private:
 int width;
 int height;
};

//main.cpp
#include<iostream>
#include"Screen.h"
#include"MyRectangle.h"
using namespace std;
int main()
{
 int width,height;
 cin>>width>>height;
 Screen screen(width,height);
 int leftX,leftY,rightX,rightY;
 cin>>leftX>>leftY>>rightX>>rightY;
 MyRectangle myRectangle1(leftX, leftY, rightX, rightY, &screen);
 MyRectangle *myRectangles=new MyRectangle[2];
 myRectangles[1].setCoordinations(10, 300, 700, 500);
 myRectangles[1].setScreen(screen);
 myRectangle1.Draw();
 for (int i = 0; i<2; i++) {
  myRectangles[i].setScreen(screen);
  (myRectangles + i)->Draw();
 }

 delete[]myRectangles;

#ifdef DEBUG
 stdcin.get();
#endif
 system("pause");
 return 0;
} 
//MyRectangle.h

#pragma once
#include"Screen.h"
class MyRectangle
{
public:
 MyRectangle();
 MyRectangle(int x1, int y1, int x2, int y2, Screen* screen);
 void setCoordinations(int x1, int y1, int x2, int y2);
 void setScreen(Screen& screen);
 void Draw();
private:
 int x1_;
 int x2_;
 int y1_;
 int y2_;
 Screen* screen_;
};




//Screen.h

#pragma once
class Screen
{
public:
 void exitWhenInvalidScreen(int x, int y);
 int getWidth();
 int getHeight();
 int setWidth(int width);    //return width
 int setHeight(int height);  //return height
 Screen();
 Screen(int, int);
 //~Screen();
private:
 int width;
 int height;
};




//main.cpp

#include<iostream>
#include"Screen.h"
#include"MyRectangle.h"
using namespace std;
int main()
{
 int width,height;
 cin>>width>>height;
 Screen screen(width,height);
 int leftX,leftY,rightX,rightY;
 cin>>leftX>>leftY>>rightX>>rightY;
 MyRectangle myRectangle1(leftX, leftY, rightX, rightY, &screen);
 MyRectangle *myRectangles=new MyRectangle[2];
 myRectangles[1].setCoordinations(10, 300, 700, 500);
 myRectangles[1].setScreen(screen);
 myRectangle1.Draw();
 for (int i = 0; i<2; i++) {
  myRectangles[i].setScreen(screen);
  (myRectangles + i)->Draw();
 }




 delete[]myRectangles;




#ifdef DEBUG
 stdcin.get();
#endif
 system("pause");
 return 0;
}



//MyRetangle.cpp

#include"MyRectangle.h"
#include"Screen.h"
#include<iostream>
#include<graphics.h>
MyRectangle::MyRectangle()
{
 x1_ = 0; y1_ = 0; x2_ = 0; y2_ = 0;
 std::cout << "myrectangle" << std::endl;
}
MyRectangle::MyRectangle(int x1, int y1, int x2, int y2, Screen* screen)
{
 x1_ = x1;
 x2_ = x2;
 y1_ = y1;
 y2_ = y2;
 screen_ = screen;
 std::cout << "myrectangle" << std::endl;
}
void MyRectangle::setCoordinations(int x1, int y1, int x2, int y2)
{
 x1_ = x1;
 x2_ = x2;
 y1_ = y1;
 y2_ = y2;
}
void MyRectangle::setScreen(Screen& screen)
{
 screen_ = &screen;
}
void MyRectangle::Draw()
{
 if ((x1_ <= 0) || (x2_ <= 0) || (y1_ <= 0) || (y2_ <= 0) || (x2_ - x1_)>(*screen_).getWidth() || (y2_ - y1_)>(*screen_).getHeight())
 {
  std::cout << "invalid myrectangle" << std::endl;
 }
 else
 {
  rectangle(x1_, y1_, x2_, y2_);
  std::cout << x1_ << ' ' << y1_ << ' ' << x2_ - x1_ << ' ' << y2_ - y1_ << std::endl;
 }
}



//Screen.cpp

#include"Screen.h"
#include<iostream>
#include<cstdlib>
#include<graphics.h>
using namespace std;
Screen::Screen()
{
 width = 640;
 height = 480;
 initgraph(width, height);
 std::cout << "screen" << std::endl;
}
Screen::Screen(int x, int y)
{
 width = x;
 height = y;
 exitWhenInvalidScreen(x, y);
 initgraph(width, height);
 std::cout << "screen" << std::endl;
}
/*Screen::~Screen()
{
getchar();
cout << "折构函数已启用";
closegraph();
}*/




int Screen::getWidth()
{
 return width;
}
int Screen::getHeight()
{
 return height;
}
int Screen::setWidth(int w)
{
 width = w;
 exitWhenInvalidScreen(width, 500);
 return width;
}
int Screen::setHeight(int h) //return height
{
 height = h;
 exitWhenInvalidScreen(500, height);
 return height;
}
void Screen::exitWhenInvalidScreen(int x, int y)
{
 if (!((x > 0 && x <= 1000) && (y > 0 && y <= 1000)))
 {
  std::cout << "invalid screen size";
  exit(0);
 }
}

其中跟graph有关的函数EGE图形库中的,应该没什么问题。用的是VS2013
新手一枚 望不吝指教-。-
“图图.exe”(Win32): 已加载“F:\C++\图图\Debug\图图.exe”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120d.dll”。无法查找或打开 PDB 文件。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp120d.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\msimg32.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.10586.20_none_22adb5eaa762c7fa\GdiPlus.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\combase.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。已加载符号。
“图图.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。已加载符号。
线程 0x2360 已退出,返回值为 0 (0x0)。
线程 0x12cc 已退出,返回值为 0 (0x0)。
线程 0x1898 已退出,返回值为 0 (0x0)。
程序“[7540] 图图.exe”已退出,返回值为 0 (0x0)。

2个回答

u010541307
u010541307   2016.05.05 22:34

可以在命令行中进入图图.exe所在目录,运行图图+参数试试。(个人觉得应该是缺少输入参数,但是你的主函数中没有写参数输入)

qq_26904543
qq_26904543   2016.05.06 08:19

很简单的问题 你按的是F5吧,F5是调试,如果调试不存在错误就会退出

想cmd窗口不消失,按ctrl+f5就好,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于vs2015 如何使得c语言程序不一闪而退
今天第一次开始使用vs,好不容易装好之后,开始写程序,先写了一个小程序来测试自己装机的正确性,写了一个小printf来测试,发现程序一闪而过,我的经验告诉我这是因为系统执行完程序了就结束了,于是在结尾加上了一个getch()来使程序在获得一个字符后再结束,但感觉不喜欢这样在源程序做改动,于是就去万能的百度看了一下,真有大神在,只需要:                        项目->属性-
如何“隐藏”运行程序的“命令提示符”界面(C代码)
本人写的东西大都是从网络和书本摘录,总结搬过来的
程序编译成功,但是运行时不出现运行结果的界面(TC)
例子:以下是一个画彩色圈的程序 #include #include #include main() { int gdriver,gmode,i,j; gdriver=DETECT; initgraph(&gdriver,&gmode,"C:\\BGI");     //多数情况是此处写错了 存放图形驱动文件的路径 ,这个路径一般在TC的安装目录下 setbkcolor(0)
关于vs2010运行C程序时,运行结果窗口一闪而过的问题
用VC++6.0和VS中的C++编程,今天正常安装好后,编写一个正确的程序,可运行的时候,DOS窗口一晃而过,也算是正常编译了,但我不懂的是它为什么消失得这么快? 会出现dos界面是因为你程序中可能用到了需要用dos显示结果(或者输入之类的)的函数,比如printf()函数,马上消失是因为你执行程序是一步到位的,dos界面做完你需要它做的事情之后就被销毁了,如果你想看清楚整个过程,可以设置断点,
windows下C/C++调用命令行不显示执行窗口的方法
1. 问题背景 :  使用dos 命令嵌入在C/C++代码中 ,执行时会显示DOS窗口。   2. 嵌入在C/C++代码中的命令行一般有以下几种方式: SellExcute() system() WinExec() CreateProcess() 参数省略.................................................... 3. 解决方案:
让VC编译出来的程序不显示CMD黑色窗口
让VC编译出来的程序不显示CMD黑色窗口   让VC编译出来的程序不显示CMD黑色窗口,只要在代码最前面加入下面这句: #pragma comment(linker,"/subsystem:windows")       #ifdef NDEBUG #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainC
VS2012及VS系列怎样屏蔽CMD窗口~
以前我写过一篇博文,是关于VS2008屏蔽CMD窗口的,详见http://blog.csdn.net/wenhao_ir/article/details/50897312 但那种方法对VS2012却不起作用! 于是我在CSDN论坛上和QQ群里提了问,最终找到了解决方法如下: 附我在CSDN论坛上的提问链接:http://bbs.csdn.net/topics/391960950 QQ
【求助交流】Qt编译后可运行,但是窗口不显示
今天继续学习
程序中调用命令行命令,不显示那个黑黑的DOS窗口
From: http://hi.baidu.com/yanqiuge/item/5da466c3d3f18453ad00ef1d 在程序中使用命令行时,会有黑黑的DOS窗口,很不爽,在网上查了一下,写一个有点实用价值的小程序: /****************************** 文件名:info.c 作用:调用systeminfo命令 用记事本显示命令执行结果
golang 调用cmd下程序隐藏黑窗口-方法1
通过go的标准库exec调用cmd命令时会闪弹黑窗口,为解决此问题在windows下可以用win32 API 的 WinExec。 此问题主要出现在带UI或无控制台的程序调用cmd时。 编译go时加入参数: go build -ldflags="-H windowsgui"