cout奇怪的输出

时间:2013-03-06 02:07:14

标签: c++ visual-studio-2010

当我尝试使用cout时,它输出一个随机数而不是我想要的句子。没有编译器错误,程序运行正常。

这是我的代码:

//question.h
#ifndef _QUESTION_H_
#define _QUESTION_H_

using namespace std;
int first()
{
    cout<<"question \n";
    return 0;
}

#endif

//main.cpp
#include <iostream>
#include "question.h"

using namespace std;

void main(){
    cout<<""<<first<<""<<endl;
    cin.ignore();
    cin.get();
}

我很自然地编写自己的头文件,所以我不确定我是否做错了,或者是否存在visual studio的问题。

3 个答案:

答案 0 :(得分:5)

您正在打印该功能的地址。你需要打电话给它:

cout<<""<<first()<<""<<endl;
               ^^

正如评论中所提到的,这也不一定要输出你期望的结果。函数的参数(也就是一堆函数调用)的顺序是未指定的,因此您的函数输出可以位于编译器选择的任何位置。要解决此问题,请单独声明:

cout<<"";
cout<<first(); //evaluated, so output inside first() printed before return value
cout<<""<<endl;

空字符串可能无关紧要,但是当你用可见的东西替换那些字符串时,它就会无关紧要。

另外,请勿使用void main。使用int main()int main(int, char**)see here)。不要使用using namespace std;,尤其是在标题中,因为std中包含大量废话并导致容易混淆的冲突(see here)。最后,选择一个与identifiers reserved for the implementation不冲突的名称作为包含警示。

答案 1 :(得分:1)

您正在打印函数first的地址而不是调用它。但是更改函数调用本身并不能解决您的问题,因为first会在内部写入cout,然后返回一个将打印的数字,这似乎不是您想要的

如果你希望first<iomanip>那样行事,你必须跳过几个箍 - 阅读那个标题,看看它是如何完成的。

答案 2 :(得分:0)

使用cout<<""<<first()<<""<<endl;您需要实际调用该函数,而不是打印其地址