1

当我尝试使用 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 是否有问题。

4

3 回答 3

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**)见此处)。不要使用using namespace std;,尤其是在标头中,因为std其中包含许多与该语句一起使用的废话,从而导致容易和混乱的冲突(请参阅此处)。最后,选择一个与为实现保留的标识符不冲突的名称作为包含保护。

于 2013-03-06T02:09:51.767 回答
1

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

如果你想表现first得像个<iomanip>小人物,你必须再跳几圈——阅读那个标题,看看它是如何完成的。

于 2013-03-06T02:09:59.233 回答
0

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

于 2013-03-06T02:10:20.860 回答