与stoi有关的奇怪错误?

时间:2016-07-27 19:29:14

标签: c++

我试图通过使用stoi将字符串转换为int,但由于某种原因它给了我一个错误并给了我这个消息:

" libc ++ abi.dylib:以std :: invalid_argument类型的未捕获异常终止:stoi:no conversion"

处理stoi的行以粗体显示在代码的底部。

这是我的代码:

 #include "LongDistanceCalls.h"
 #include <iostream>
 #include <string>
 #include <fstream>
 #include <sstream>
 #include <algorithm>
 #include <iterator>

using namespace std;  


string line;
string temp = "";
string beginning_time;

void convertTimeintoInt(string beginning_time)
{
  for(char a : beginning_time)
  {
     if(a == ':')
            continue;
    else
       temp += a;
  }
}

int main()
{
  ifstream inFile;
  string day;
  int minutes;
  double total_callpay;
  //opens .txt file
  inFile.open("CallRecords.txt");

  //if .txt file is openable, printed to command line.
  if (inFile.is_open())
  {
     cout<<"Day Time Duration Cost"<<endl;

     while(getline(inFile,line))
     {
         istringstream split(line);//splits each string into 3 seperate strings (day, beginning_time, minutes)

        while(split)
             {
               split >> day;
               split >> beginning_time;
               split >> minutes;
               **int time = stoi(temp);**
               time = time > 0 && time < 2400;

2 个答案:

答案 0 :(得分:0)

string temp = "";

int main()
{
    ...
    int time = stoi(temp);
    ...
}

你在哪里改变temp的值。 stoi错误输出,因为输入值是空字符串。 See here位于底部的例外条目下。

答案 1 :(得分:0)

首先在此代码中:

string beginning_time;

void convertTimeintoInt(string beginning_time)
{
   for(char a : beginning_time)
   {
      if(a == ':')
           continue;
      else
           temp += a;
   }
}

您有全局变量beginning_time以及具有相同名称的参数。因此在函数内部使用局部变量,而不是全局变量。这是建议尽可能避免全球变量的原因之一。

其次你只定义了函数convertTimeintoInt,但实际上并没有调用它,所以它什么都不做。相反,你应该避免使用全局变量并使你的函数像这样:

int convertTimeintoInt( string beginning_time )
{
    string temp;
    for(char a : beginning_time)
    {
        if(a == ':')
            continue;
        else
            temp += a;
    }
    return std::stoi( temp );
}

然后在main()内调用它:

    split >> beginning_time;
    split >> minutes;
    int time = convertTimeintoInt( beginning_time );

注意:我只是复制你的函数实现,假设它具有正确的行为。