首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件中读取,然后从转换为int?

从文件中读取,然后从转换为int?
EN

Stack Overflow用户
提问于 2013-10-09 06:11:16
回答 3查看 10K关注 0票数 3

我编写了这个函数,该函数从包含ACII十进制数字的文件中读取数据,并将这些数字转换为存储在整型数组中的整数。下面是该函数:

代码语言:javascript
运行
复制
void readf1()
{
    int myintArray[100];
    int i = 0;
    int result;
    string line = "";
    ifstream myfile;
    myfile.open("f1.txt");

    if(myfile.is_open()){
      //while not end of file
      while(!myfile.eof()){
        //get the line
        getline(myfile, line);

        /* PROBLEM HERE */
        result = atoi(line);

        myintArray[i] = result;
        //myintArray[i]
        cout<<"Read in the number: "<<myintArray[i]<<"\n\n";
        i++;
     }
  }
}

问题是atoi不工作。我得到的错误是cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int atoi(const char*)'。我不确定为什么它不工作,因为我看了例子,我正在使用它完全相同。有人知道我可能做错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-09 06:15:11

atoi是一个C函数,它接受C字符串,而不是C++ std::string。您需要从string对象中获取原始char*以用作参数。这样做的方法是.c_str()

atoi(line.c_str());

atoi的C++等价物是std::stoi (C++11):

std::stoi(行);

此外,while (!file.eof())被认为是一种糟糕的做法。最好是在表达式内部执行I/O操作,以便返回流对象,然后评估有效的文件条件:

while (std::getline(myfile,line))

但是,您的代码还可以进一步改进。下面是我会怎么做:

#include void readf1() { std::vector myintArray;std::string line;std::ifstream myfile("f1.txt");for (int result;std::getline(myfile,line);result = std::stoi(line)) { myintArray.push_back( result );std::cout <<“读入的编号:”<< result << "\n\n";} }

票数 7
EN

Stack Overflow用户

发布于 2013-10-09 06:13:35

atoi()要的是char *,而不是string

代码语言:javascript
运行
复制
result = atoi(line.c_str());
票数 1
EN

Stack Overflow用户

发布于 2013-10-09 06:13:52

您可以使用

代码语言:javascript
运行
复制
result = atoi(line.c_str());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19259418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档