0

我是 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

4 回答 4

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;
}
于 2012-04-21T20:59:38.493 回答
1

当您使用cin >> x >> y时,该语句仅读取两个数字输入值,而不是您输入该行所需的 Enter 键。该 Enter 按键停留在输入缓冲区中,供cin.get()以后使用。

于 2012-04-21T21:00:01.897 回答
0

您可以使用此行来保持控制台打开:

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

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


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

于 2012-04-21T21:08:50.350 回答
0
#include <iostream>
using namespace std ;



int main(void)
{


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

  cin.get();

   return 0;
}
于 2012-05-01T09:26:19.597 回答