将字符串转换为long long int
我想从string
的文本文件中读取第3行,将其转换为long long int
,然后返回该值。将字符串转换为long long int
上的文本文件的第3行的数据是123456789
long long int File::Getline3(int user1, int user3)
{
std::string filename = std::to_string(user1);
std::ifstream fin(filename + ".txt");
fin.getline (line1, 5);
fin.getline (line2, 5);
fin.getline (line3, 20);
fin.close();
// convert line 3 to a string called str
const char *line3;
std::string str(line3);
// convert str to long long int called user3
long long int strtoll(const char *nptr, char **endptr, int base);
char* endptr = NULL;
user3 = strtoll(str.c_str(), &endptr, 10);
return user3;
}
的意见均显示什么,我认为我做的,但我可能是错的(我是新来的指针) 。
当我尝试构建我的程序时,出现“无法解析的外部”错误。
long long int strtoll(const char *nptr, char **endptr, int base);
此行声明功能。这意味着当您拨打strtoll
几行时,您将调用该函数,因为它是最明显的候选项。但是,你从来没有定义它。
相反,你的意思是叫std::strtoll
,这是定义(标准库),并会通过你的推测using namespace std
指令中发现,如果你通过虚报的这种不存在的功能不隐藏它你自己的同名。 :)
只需去除多余的宣言:你的const char* line3
,你在函数内部声明
// convert str to long long int called user3
char* endptr = NULL;
user3 = strtoll(str.c_str(), &endptr, 10);
您也有类似的问题,从来没有指派任何东西,然后构造一个串出的。这是不明确的;指针未初始化。假设你有一些line3
数据成员(以及你的line1
和line2
),你再次隐藏它与一个相同名称的局部变量。
最后,将user3
按值传递是完全毫无意义的,如果您只是写入并返回它。删除该参数。
把所有这些组合起来,你的代码也许应该是这样的:
// convert line3 to long long int
char* endptr = NULL;
return strtoll(line3, &endptr, 10);
总之,少申报快乐!
它现在编译至少,但是返回的值仍然不是文本文件的第3行,但是10个随机数字,有什么建议? – user3001499
也strtoll没有工作,通过一个错误说它是未定义的,所以不得不将其更改为strtol,这可能是为什么它不能正常工作? – user3001499
我不会在注释中一行一行地反复调试程序......但是如果您查看['strtoll']手册(http://en.cppreference.com/w/cpp/string/byte/strtol)从C++ 11开始,你将会看到它是用C++语言编写的(尽管如果你在Linux上,你应该通过POSIX使用它)。 –
long long int File::Getline3(int user1)
{
std::string filename = std::to_string(user1);
std::ifstream fin(filename + ".txt");
std::string line1, line2; // place to actually store the lines
getline(fin, line1); // read a line
getline(fin, line2); // read another line
long long int number_on_line_3; // somewhere to store the number
fin >> number_on_line3; // store the number
fin.close();
return number_on_line_3; // return the number
}
用什么解释任何答案,请 – user3001499
代码没有编译 – Raxvan
没有,错误是“无法解析的外部” – user3001499