【问题标题】:Getting multiline sentence input in c++在 C++ 中获取多行句子输入
【发布时间】:2019-09-09 11:23:13
【问题描述】:

我正在尝试使用 2D char 数组在 c++ 中获取多行字符串输入(可能包含空格),但循环被终止而没有在代码中为 n=1 获取任何输入:

当 n=2 时,它只需要一个输入,当我尝试打印 input[0] 时,它会打印空白。但是对于 cout

char input[100][100];
int n,i;
cout<<"Enter no of lines : ";
cin>>n;
cout<<"Enter "<<n<<" sentences : "<<endl;
for(i=0;i<n;i++)
    cin.getline(input[i],100);

【问题讨论】:

    标签: c++ arrays string


    【解决方案1】:

    这是混合格式化和未格式化输入时的常见问题。格式化输入后,内部缓冲区位于第一个空白字符之前和\n 之前。防弹方法是始终使用getline,然后扫描第一行以提取行数。但是对于这样一个简单的情况,在读取行数后使用虚拟getline跳过行尾就足够了:

    char input[100][100];
    int n,i;
    cout<<"Enter no of lines : ";
    cin>>n;
    cin.getline(input[0], 100);   // skip the end of line
    cout<<"Enter "<<n<<" sentences : "<<endl;
    for(i=0;i<n;i++)
        cin.getline(input[i],100);
    

    但是:

    • 您应该始终在读取后测试cin(如果用户输入错误的是 e 而不是 4 怎么办?)
    • 您应该避免使用 char arrays 并始终在 C++ 中使用 string(更简单、更简洁、不易出错)

    【讨论】:

      【解决方案2】:

      当您输入行数(例如 4)时,您按 4,然后按 enter 键。它在标准输入的标准输入中存储为4\n。当您使用cin.getline() 阅读时,您正在阅读\n。您将不得不使用cin.ignore 来忽略标准输入中的现有缓冲区。但是使用 >> 运算符更好,因为它可以处理换行符。 对于多行输入,您可以向getline() 输入第三个参数:一个分隔符,指定指示输入结束的内容。

      【讨论】:

        猜你喜欢
        • 2014-06-02
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 2014-06-24
        • 2011-08-09
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多