在C++中以句子作为输入的方法

3
我正在尝试依次输入两个句子,但在打印时它会打印一个空格,并在下一行打印第一句话,然后循环退出。
以下是我的代码:
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个回答

4
cin >>t;

这将提示用户输入一些内容。假设用户按照预期操作,他们会输入一些数字,然后敲击回车键。

数字将被存储在输入缓冲区中,但由于敲击回车键而添加了一个换行符。

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

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

稍后,您调用cin.getline(b,100000);,它在输入缓冲区中寻找换行符。它立即找到一个,因此不需要提示用户输入更多内容。因此,第一次调用getline似乎没有做任何事情,但实际上它确实做了些事情。

3

大型数组并不是一个好主意。尝试使用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;
}

3
原因是cin>>t会在第一个非数字字符处停止,这个非数字字符是换行符。接下来的cin.getline(b,100000)会将这个换行符读入b中,并将"run run"读入c中。
为了避免这种情况,你可以先将换行符读入其他地方,例如:
cin >> t;

// read the newline character
getchar();

while(t--){...}

只是好奇,一个 getchar() 不就足够了吗?(如果我错了,请纠正我) - Arun A S
@ArunA.S 是的,实际上 getchar() 更简洁、更好。已更新答案。谢谢。 :P - herohuyongtao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接