我不知道为什么这个程序没有打印任何东西,甚至不是第一个打印声明。可能是什么问题?
使用g++ filename.cpp
成功编译。
#include "deck.h"
#include "hand.h"
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
cout << "not even this";
vector<Hand> hands;
Deck deck;
int players;
int seed;
int sizeOfHand = 5;
int i;
vector<Hand>::iterator itr;
cout << "Enter seed: ";
cin >> seed;
srand(unsigned(seed));
cout << "Enter number of players: ";
cin >> players;
for (i = 0; i < players; i++) {
hands.push_back(Hand());
}
deck.Shuffle();
for (i = 0; i < sizeOfHand; i++) {
vector<Card> cards = deck.Deal(players);
for (itr = hands.begin(); itr < hands.end(); itr++) {
cout << "1";
itr->add(*cards.begin());
cards.erase(cards.begin());
}
}
for (itr = hands.begin(), i=1; itr < hands.end(); itr++, i++) {
cout << "Player " + i;
itr->showHand();
}
}
答案 0 :(得分:6)
出于性能原因,大多数操作系统会将您写入的输出缓冲到cout
(或cerr
)。除非您刷新输出(例如,如果您还打印换行符),您只有在缓存已满并刷新到标准输出时才会看到输出,因此在控制台窗口中可见。这个缓冲区可以容纳很多字符;可能是你的程序输出的一切此行为称为“行缓冲”。
有两种方法可以修复您的程序,具体取决于您实际想要拥有的内容:
一种解决方案是每次希望输出可见时在代码中输出换行符:
cout << "Enter a number: " << endl;
不会自动打印换行符,因为之后可能会想要写一些而不用换行符,例如当产生一行输出的逻辑被分成几行代码时,或者输出具有某种二进制特性时。
要刷新输出而不写入换行符,您还有两个选项:
打印后调用cout.flush()
cout << "Enter a number: ";
cout.flush();
将std::flush
信息流转换为cout
,可以与打印代码结合使用:
cout << "Enter a number: " << flush;
答案 1 :(得分:3)
根据发生的情况,您的问题已经得到解答,但换行不是唯一的解决方案。
如果您想在与输出相同的行上输入,则可以刷新:
cout << "Enter seed: " << flush;
cin >> seed;
请注意,endl
实际上会在内部调用flush
。这与写"\n"
不同。
答案 2 :(得分:3)
您需要为流启用连续缓冲。在main
:
std::cout << std::unitbuf;
这会导致流在每次输出操作后刷新。