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

时间:2015-02-17 19:39:00

标签: c++

当我尝试按下' y'输入第二个查询作为输入时,我收到以下错误当被要求&#34时;你想输入更多的查询吗?输入(y / n)"在我的代码中:

在抛出' 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;
}

请帮助我的代码出现问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

可以通过检查getline之后的字符串来检测此错误,以验证它的长度不是零。 “编写程序很容易。编写能够正常工作的强大程序更加困难。” - Thomas Matthews

<强>解决方案:
解决方法是在从延续提示中读取输入后使用cin.ignore(100000, '\n')。这将从流中提取\n,以便您的输入流“刷新”并准备好按预期进行新输入