在c ++中将句子作为输入

时间:2015-04-03 06:44:05

标签: c++ string input sentence

我试图一个接一个地输入两个句子,但是在打印时打印一个空格,在下一行打印第一个句子并且循环正在退出。

这是我的代码:

int main()
{

    char b[100000];
    char c[100000];
    int t;
    cin>>t;
    while(t--)
    {
        cin.getline(b,100000);
        cin.getline(c,100000);
        cout<<b<<"\n"<<c<<"\n";
    }
}

输入:

1
run run
good sentence

输出:

Blankspace
run run

3 个答案:

答案 0 :(得分:3)

原因是cin>>t停在第一个非数字字符处,即换行符。下一个cin.getline(b,100000)会将此换行符读入b和"run run"c

为避免这种情况,您可以先将换行符读取到其他位置。像

cin >> t;

// read the newline character
getchar();

while(t--){...}

答案 1 :(得分:3)

cin >>t;

这将提示用户输入一些内容。假设用户按照他们的预期行事,他们会输入一些数字,然后按Enter键。

数字将存储在输入缓冲区中,但是换行符也是如此,这是因为它们点击了输入键。

cin将解析数字以产生一个整数,它存储在num变量中。它在换行符处停止,该换行符保留在输入缓冲区中。

    cin.getline(b,100000);
    cin.getline(c,100000);

稍后,您调用cin.getline(b,100000);,它在输入缓冲区中查找换行符。它会立即找到一个,因此不需要提示用户输入任何内容。因此看起来第一次调用getline并没有做任何事情,但事实上确实如此。

答案 2 :(得分:1)

大阵列并不是个好主意。请尝试使用std :: string。

#include <iostream>
#include <string>

int main() {
    std::string lineOne;
    std::string lineTwo;

    std::getline(std::cin, lineOne);
    std::getline(std::cin, lineTwo);

    std::cout << lineOne << "\n" << lineTwo;
    return 0;
}