我有2个循环:
//Loop 1
for ( vector<string>::iterator iter = vecv.begin() ; iter != vecv.end() ; iter++)
{
cout << "-----IN LOOP----" << *iter;
}
//Loop 2
for ( vector<string>::iterator iter = vecv.begin() ; iter != vecv.end() ; iter++)
{
cout << "-----IN LOOP----" << *iter << endl ;
}
现在vecv是一个字符串向量,包含2个字符串:
分别为 65
和A000
。
现在循环1不打印任何内容,实际上循环似乎根本不运行。
但是,如您在循环2中看到的那样添加endl
时,它会提供此输出:
-----IN LOOP----65
-----IN LOOP----$A000
到底发生了什么?
请注意,我仅在Visual Studio 2010中遇到此问题,而不是Dev-C ++ !!
答案 0 :(得分:3)
std::endl
也会刷新缓冲区。如果您想在没有换行符的情况下进行刷新,请使用std::flush
。
答案 1 :(得分:2)
如果没有endl
,你怎么知道它不打印任何东西?通过观察运行程序?如果是这样,问题是cout
提供缓冲输出:它实际上只在其缓冲区已满时在屏幕上(或在文件中)打印一些内容。
endl
会刷新缓冲区。
如果您想要无缓冲输出,可以使用cerr
,但这会导致一些差异(例如,现在如果您想将输出重定向到文件,则应该2>
而不是>
等等。)
如果您想要缓冲输出但又不想换行,请将flush
打印到cout
。
答案 2 :(得分:0)
我认为cout.clear()
只会破坏cout缓冲区。因为它没有被刷新所以它丢失了。
编辑1:代码提供:
#include <iostream>
#include <vector>
using namespace std;
int main(void) {
vector<string> vecv;
vecv.push_back("abc");
vecv.push_back("def");
//Loop 1
for ( vector<string>::iterator iter = vecv.begin() ; iter != vecv.end() ; iter++)
{
cout << "-----IN LOOP 1----" << *iter;
}
//Loop 2
for ( vector<string>::iterator iter = vecv.begin() ; iter != vecv.end() ; iter++)
{
cout << "-----IN LOOP 2----" << *iter << endl ;
}
}
输出:
./a.out
-----IN LOOP 1----abc-----IN LOOP 1----def-----IN LOOP 2----abc
-----IN LOOP 2----def
答案 3 :(得分:0)
您没有显示完整的程序,但我怀疑它以a结尾
system("pause");
,正如MSVC教程中经常看到的那样。调用system()
时MSVC运行时不刷新输出缓冲区(不需要),因此如果没有std::cout
,std::flush
,则所有输出到std::endl
都会保持缓冲状态。已完成std::cin
的输入。
尝试在控制台窗口中运行程序(开始 - >运行 - > cmd.exe)。即使没有endl
,也应在程序终止时显示输出。