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”
    之间的区别。