我试图通过使用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;
答案 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 );
注意:我只是复制你的函数实现,假设它具有正确的行为。