【问题标题】:cout not working in c++ after taking line input (getline)cout 在进行行输入后无法在 C++ 中工作(getline)
【发布时间】:2025-12-07 06:10:01
【问题描述】:

我正在实施公平竞争算法,但我注意到 cout 语句不起作用

下面是我的代码。请注意,所有必需的头文件都包括在内,并且没有编译错误(据我所知)。程序运行没有错误,我得到终止命令(再次,没有错误)。

但同时没有输出。甚至 cout 测试 2 也不会反映在输出中。

注意:如果我在每个 cout 语句的末尾使用 endl,我会得到输出,但这里不方便,因为我想打印矩阵。另外必须有一个简单的方法,而不是每次都写 enld

int main()
{

    int i,j,k,x,y,z;
    bool status[24]={false};
    char map[5][5]={0};
    string key;
    cout<<"Enter the key"<<endl;

    cout<<"Test 1";
    getline(cin,key);
    cout<<"Test 2";
    x=key.length();

    for(i=0;i<x;i++)
        key[i]=toupper(key[i]);

    for(i=0;i<x;i++)
    {
        y=key[i]-65;
        if(status[y]==0)
            status[y]=1;
    }

    cout<<"Adding the main key string";

    i=j=k=z=0;
    while(k<x)
    {
        if(j==5)
        {
            i++;
            j=0;
        }
        map[i][j++]=key[k++];
    }
    cout<<"Adding the remaining alphabets";
    while(k++<25)
    {
        if(j==5)
                {
                    i++;
                    j=0;
                }
        while(status[z++]==false)
            map[i][j++]=z+64;
    }

    cout<<"Output matrix";
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
        {
            cout<<map[i][j];
        }


    return 0;
}

【问题讨论】:

  • 请列出您的包含文件也有问题
  • 我说没有错误,所有的头文件都包含了
  • @πάνταῥεῖ 感谢您的指导,我只是一个新手,但如果“好”人不那么傲慢并表现出帮助他们的下等人的本性,世界会不会变得更美好。如果你能回答我的问题,我会很高兴,而不是欺负/专横。 “如果你没有把知识传授给别人,你就徒劳地获得了知识。”
  • 看起来您只需要在输出行之后使用cout.flush(); 即可查看写入后立即出现的值。 cout 在大多数实现中使用缓冲输出。
  • @SagarPatel “顺便说一句,我的问题不值得吗??”好吧,您至少应该付出一些努力来制作MCVE,而不是仅仅提供一个纯代码转储。第一个反对票可能是关于那个大喊大叫的文字。这在这里不太受欢迎。

标签: c++ string cout


【解决方案1】:

在每个cout 语句之后添加cout.flush()(或隐式刷新的std::endl)。

cout 使用缓冲输出, 使用cout.flush() 将清除缓冲区并强制写入内容。

感谢 πάντα ῥεῖ 的指导

【讨论】:

    【解决方案2】:

    尝试使用

    fflush(stdin);
    

    cout&lt;&lt;"Test 1"; 之后如果不起作用,请在getline(cin,key); 之后尝试

    cout<<"Test 1";
    getline(cin,key);
    cout<<"Test 2";
    

    【讨论】:

    • 谢谢兄弟,但我之前已经尝试过了,它对我不起作用
    • fflush 并不总是有效。在此处查看替代解决方案*.com/questions/28382962/…
    • @Azad fflush(stdin); 你的意思可能是cout.flush()。将 c 风格的 IO 与 c++ IO 混合不是一个好主意,并且不能保证与该语言的所有实现一起工作。输入缓冲也与 OP 中描述的行为无关。