【问题标题】:accepting multiple strings as input in c++在 C++ 中接受多个字符串作为输入
【发布时间】:2015-02-20 02:32:46
【问题描述】:

当我在我的代码中询问“您想输入更多查询吗?输入 (y/n)”时按“y”尝试输入第二个查询作为输入时出现以下错误:

在抛出 'std::out_of_range' 的实例后调用终止 什么():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;
}

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

【问题讨论】:

  • 什么是s?您能否包含更多代码,最好从调试中删除杂乱无章的代码?
  • 从 eroor 消息中,我了解到 s 是字符串向量,不是吗?那我猜你没有添加足够的元素。
  • int main() { string s[SIZE]; SQLParser 解析器;字符输入;诠释我=0; cout>在;我++; //} /*catch (std::exception const &exc) { std::cerr
  • SIZE #定义为 100
  • 不要在 cmets 中粘贴代码。请编辑您的问题并在此处发布代码。

标签: c++


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 如果回答有用,请点击对勾。
  • Thomas,我已经按照你说的修改了代码。但是当我尝试创建对象数组并尝试运行上面的代码时。它再次向我抛出同样的错误。该值存储在 s[i] 中,但我不明白问题到底出在哪里。你能看看这个吗?
  • 两个建议:1)使用调试器; 2) 使用std::vector 而不是数组。试试这些。如果您不知道如何使用调试器,那就花时间学习使用调试器
猜你喜欢
  • 2014-10-28
  • 2017-05-05
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2021-08-17
相关资源
最近更新 更多