c++ - 在C++中接受多个字符串作为输入

标签 c++

当我在代码中询问“是否要输入更多查询?输入 (y/n)”时,我尝试通过按“y”输入第二个查询作为输入时出现以下错误:

在抛出“std::out_of_range”实例后调用终止 what(): basic_string::substr 中止(核心转储)

我的代码是:

#define SIZE 100

#include "SQLParser.cpp"



using namespace std;



int main() {



    string s[SIZE];

    SQLParser parser;
    char in;
    int i=0;

    cout<<"Enter the input queries:";

    do
    {
    //try
    //{
        std::getline(std::cin,s[i],'\n');
    //cin.ignore(100000, '\n');

    //cout<<" "<<s[i]<<"\n";

    parser[i].sql=s[i];

    parser[i].ProcessSQL();

    cout<<"Do you want to enter more queries? Press (y/n):";

    cin>>in;

    cin.ignore(100000, '\n');

    i++;

    //}
    /*catch (std::exception const &exc)
    {
            std::cerr << "Exception caught " << exc.what() << "\n";
    }*/

    }while(in!='n');

    /*string s("CREATE TABLE tab(aa int,bb string, cc string)");

    string s1("CREATE TABLE xyz(name string,gender char,age int,address string)");
    parser.sql=s;

    //parser1.sql=s1;
    string s2("INSERT INTO tab(name,author,date) VALUES ('aa','bb','cc')");

    //parser.sql = s2;

    parser.ProcessSQL();
    parser.sql = s1;
    parser.ProcessSQL();

    */

    return 1;
}

请帮助我的代码有什么问题。

最佳答案

您的问题是输入流中残留换行符。
当系统提示您继续时,请按 Y``[ENTER]。 您的输入流如下所示:

+---+------+  
| Y | '\n' |  
+---+------+  

您执行 cin >> in; 从流中提取 Y。您的流现在看起来像:

+------+  
| '\n' |  
+------+  

转到循环的顶部,您的程序执行 getline,它会读取直到找到 \n。由于输入流有一个(见上文),getline 返回一个空字符串。

可以通过检查 getline 之后的字符串来验证它的长度不为零来检测此错误。 “编写程序很容易。编写能够正常工作的健壮程序更加困难。” -- 托马斯·马修斯

解决方案:
解决方案是在从继续提示中读取输入后使用 cin.ignore(100000, '\n')。这将从流中提取 \n,以便您的输入流“刷新”并准备好接受新的输入如您所愿

关于c++ - 在C++中接受多个字符串作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569731/

相关文章:

c++ - C++ 方法没有被覆盖?

c++ - 如何使用 gdb 从核心文件中获取 lua 堆栈跟踪

c++ - 为什么我们没有 map 的 hash 和 pred 仿函数?

c++ - 在 direct3d11 中映射资源和分配数据

c++ - 从 vector 的元素初始化结构

c++ - 在 C++ 中标记 "Braced Initializer List"样式的字符串(使用 Boost?)

c++ - 如何使用c语言在framebuffer中绘制图形..?

c++ - 在不更改类的情况下覆盖类运算符 new 和 delete

c++ - std::sort() 中使用了哪种类型的排序?

c++ - 如何处理 "class type redefinition"