C++ 此代码没有输出
我不知道为什么这个程序不打印任何东西,甚至连第一个打印语句都不打印。有什么问题吗 它使用C++ 此代码没有输出,c++,C++,我不知道为什么这个程序不打印任何东西,甚至连第一个打印语句都不打印。有什么问题吗 它使用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";
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();
}
}
#包括“deck.h”
#包括“hand.h”
#包括
#包括
#包括
使用名称空间std;
int main()
{
库特种子;
srand(未签名(种子));
cout>玩家;
对于(i=0;i
出于性能原因,大多数操作系统都会缓冲您写入cout
(或cerr
)的输出。除非刷新输出(例如,如果同时打印换行符,则会发生这种情况),否则只有在缓存已满并刷新到标准输出时,才会看到输出,从而在控制台窗口中可见。这个缓冲区可以容纳相当多的字符;可能是程序输出的所有内容。这种行为称为“行缓冲”
有两种方法可以修复您的程序,具体取决于您实际想要的程序:
cout << "Enter a number: " << endl;
cout
,可与打印代码结合使用:
cout << "Enter a number: " << flush;
cout出于性能原因,大多数操作系统都会缓冲您写入cout
(或cerr
)的输出。除非刷新输出(例如,如果同时打印换行符,则会发生这种情况),否则只有在缓存已满并刷新到标准输出时,才会看到输出,从而在控制台窗口中可见。这个缓冲区可以容纳相当多的字符;可能是程序输出的所有内容。这种行为称为“行缓冲”
有两种方法可以修复您的程序,具体取决于您实际想要的程序:
一种解决方案是在每次希望输出可见时在代码中输出换行符:
cout << "Enter a number: " << endl;
流入cout
,可与打印代码结合使用:
cout << "Enter a number: " << flush;
cout你的问题已经得到了回答,就正在发生的事情而言,但是换行不是唯一的解决办法
如果希望输入与输出在同一行上,可以刷新:
cout << "Enter seed: " << flush;
cin >> seed;
cout种子;
请注意,endl
实际上在内部调用了flush
。这不同于仅仅写“\n”
你的问题已经得到了回答,就正在发生的事情而言,但是换行不是唯一的解决办法
如果希望输入与输出在同一行上,可以刷新:
cout << "Enter seed: " << flush;
cin >> seed;
cout种子;
请注意,endl
实际上在内部调用了flush
。它不同于仅仅编写“\n”
您需要为流启用连续缓冲。将此添加到main
的顶部:
std::cout << std::unitbuf;
std::cout您需要为流启用连续缓冲。将此添加到main
的顶部:
std::cout << std::unitbuf;
std::难道不能在同一行中等待输入吗?是的,我想cin
语句无论如何都能工作,程序本身也能按预期运行。如果看不到任何输出,则无法真正判断;)(当然你可以调试一下)@A4L啊,我误解了你的问题。关于这一点,见帕迪的答案。嗯。。这似乎与平台有关,只是测试了一个没有刷新的基本I/O,它可以正常工作(win7 32+g++(GCC)4.6.2):/@A4L在哪个操作系统上?我从来没有在一个不缓存标准数据流的操作系统上工作过……难道不能在同一行中等待输入吗?是的,我猜cin
语句无论如何都能工作,程序本身也能按预期运行。如果看不到任何输出,则无法真正判断;)(当然你可以调试一下)@A4L啊,我误解了你的问题。关于这一点,见帕迪的答案。嗯。。这似乎与平台有关,只是测试了一个没有刷新的基本I/O,它可以正常工作(win7 32+g++(GCC)4.6.2):/@A4L在哪个操作系统上?我从未在一个不缓存标准数据流的操作系统上工作过……嗯,我想写“\n”
也会刷新。这是否仅适用于printf
?如果我没记错的话,cout
不是按照printf
实现的,所以这可能就是它们在这里行为不同的原因?“\n”
只有在流被行缓冲时才会刷新。默认情况下,绑定到交互设备(如控制台)的流是行缓冲的。但是,endl
的目的是写一个换行符并始终刷新。对于完全缓冲的流,您将看到使用endl
和“\n”
之间的区别。嗯,我认为编写“\n”
也会刷新。这是否仅适用于printf
?如果我没记错的话,cout
不是按照printf
实现的,所以这可能就是它们在这里行为不同的原因?“\n”
只有在流被行缓冲时才会刷新。默认情况下,绑定到交互设备(如控制台)的流是行缓冲的。但是,endl
的目的是写一个换行符并始终刷新。对于完全缓冲的流,您将看到使用endl
和“\n”
之间的区别。