在线路输入(getline)后,cout无法在c ++中工作

时间:2015-02-21 17:21:36

标签: c++ string cout

我正在实施fairplay算法,但我注意到cout语句不起作用

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

但同时没有输出。即使cout测试2也没有反映在输出中。

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

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;
}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

尝试使用

fflush(stdin);

cout<<"Test 1";之后如果不能正常工作,请尝试getline(cin,key);

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