返回值后,防止控制台窗口自行关闭

时间:2012-04-21 20:57:13

标签: c++

我是c ++新手。我的第一个应用程序看起来就是这样。

#include "stdafx.h"
#include <iostream>
using namespace std;
int add (int x, int y);

int add (int x, int y){
return (x+y);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int x, y;
    cin >>x>>y;
    cout <<add (x,y);
    cin.get();
    return 0;
}

得到2个问题:

  1. 为什么控制台窗口在函数返回值后直接关闭,即使我使用cin.get();
  2. 我在文件顶部没有int add (int x, int y);行测试了此应用程序。它运作良好。我是否需要为每个功能或应用程序编写原型而不用它?

4 个答案:

答案 0 :(得分:4)

问题1:cin >>x>>y在输入缓冲区中留下了一个换行符,而不是由cin.get读取,导致它继续。

尝试

cin.sync(); //remove unread characters
cin.get(); //read one character (press enter)

问题2:原型就在那里你可以让编译器知道函数存在,然后使用函数(比如在main中),然后定义函数体(稍后在main之后)。

int add (int, int); //compile error if left out

int main()
{
    add (3, 4);
}

int add (int a, int b)
{
    return a + b;
}

答案 1 :(得分:1)

当您使用cin >> x >> y时,该语句只读取两个数字输入值,但您需要输入该行的Enter键。 Enter keypress保留在输入缓冲区中,稍后由cin.get()消耗。

答案 2 :(得分:0)

您可以使用此行来改为打开控制台:

cin.ignore(numeric_limits<streamsize>::max());

或者,如果您使用的是Visual Studio,则可以使用ctrl + F5运行程序,并且控制台应该保持打开状态而不使用这些技巧。或者你可以从你自己开始的cmd.exe窗口运行你的程序。


只有在想要在当前翻译单元中定义(或代替)函数之前调用函数时,才需要函数原型。这就是为什么头文件包含您在另一个实现文件中定义的函数的函数原型。

答案 3 :(得分:0)

#include <iostream>
using namespace std ;



int main(void)
{


  cout<<" \nPress any key to continue\n";

  cin.get();

   return 0;
}