除非涉及 endl,否则返回字符串的 C++ 函数不起作用...?
Posted
技术标签:
【中文标题】除非涉及 endl,否则返回字符串的 C++ 函数不起作用...?【英文标题】:C++ function that returns string doesn't work unless there's an endl involved...? 【发布时间】:2009-02-06 05:07:06 【问题描述】:我在一个返回字符串的类中有一个函数。在这个函数内部,我只有在 return 语句之前将cout<<endl
添加到函数中时才能使其工作。知道为什么会这样,或者我该如何解决?我在 Mac 上的 Eclipse 中运行它
在“main.cpp”中:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>
#include "Braid.h"
using namespace std;
static int size=3;
int main()
Braid * b1 = new Braid(size);
b1->setCanon();//creates canonical braid.
cout<<"a ";
cout<<b1->getName()<<endl;
cout<<" b ";
在“Braid.h”中:
public:
Braid(int);
void setCanon();
string getName();
;
在“Braid.cpp”中:
string Braid::getName()
string sName="";
/* body commented out
for(int i=0; i<height; i++)
for(int j=2; j<(width-2); j++)
sName += boxes[i][j];
sName += "|";
*/
//cout<<endl;
return sName;
当我运行我的主代码时,没有注释该函数的主体,我得到的输出是"a 0|0|12|12|0|0|2|1|1|1 |1|2|"
它返回的“名称”是正确的,但它没有通过函数调用。如果我取消注释 //cout<<endl
行,该函数将起作用,我的输出是"a 0|0|12|12|0|0|2|1|1|1|1|2|
b "
在注释掉函数体之后,它只创建一个空字符串并返回它,我的输出只有“a”,然后如果我添加 endl,我会得到预期的“a b”。
我做错了什么? endl 有什么我缺少的东西吗?
【问题讨论】:
【参考方案1】:实际上 getName() 函数可能工作正常。但是,cout 会“缓存”输出(即,当内部文本缓冲区已满时,它会在屏幕上打印输出)。 'endl' 刷新缓冲区并强制 cout 将文本(在缓存中)转储到屏幕。
在 main.cpp 中尝试 cout.flush()
【讨论】:
成功了。我猜 cout 并不像我想的那样工作。无论如何,谢谢! cout 与其说是真正的打印语句,不如说是存储输出的地方。【参考方案2】:也许你的终端很懒。尝试省略 endl
并插入 cout.flush(
) 作为下一行。
【讨论】:
【参考方案3】:cout
应该在程序结束时刷新。
fow@lapbert ~ % cat blah.cpp
#include <iostream>
int main()
std::cout << sizeof(int);
fow@lapbert ~ % ./a.out
4
【讨论】:
我遇到过一些旧的 Sun 工作站,但没有。以上是关于除非涉及 endl,否则返回字符串的 C++ 函数不起作用...?的主要内容,如果未能解决你的问题,请参考以下文章