2013-10-08 3 views
1

Я написал эту функцию, которая должна считываться из файла, содержащего десятичные числа ACII, и преобразовывать их в целые числа, хранящиеся в массиве int. Вот эта функция:Читайте из файла, затем конвертируйте из в int?

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*)'. Я не уверен, почему он не работает, когда я смотрю на примеры, и я использую его точно так же. Кто-нибудь знает, что я могу делать неправильно?

+0

Можете ли вы 'соиЬ << line' и после того, что это такое? –

ответ

5

atoi является функцией C, которая принимает C-строку, а не C++ std::string. Вам нужно получить необработанный char* из строкового объекта, который будет использоваться в качестве аргумента. Способ это .c_str():

atoi(line.c_str()); 

++ эквивалентно С к atoi является std::stoi (C++ 11):

std::stoi(line); 

Кроме того, while (!file.eof()) считается плохим практика. Это лучше делать операцию ввода/вывода внутри выражения поэтому объект потока возвращается и действительные условия файла оцениваются после:

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

Ваш код может быть улучшена далее, однако. Вот как бы я это сделать:

#include <vector> 

void readf1() 
{ 
    std::vector<int> 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 << "Read in the number: " << result << "\n\n"; 
    } 
} 
+0

Не только вы ответили на мой вопрос, но предоставили улучшенный код и показали лучшие навыки для практики! Спасибо! – Andy

1

atoi() хочет char *, не string:

result = atoi(line.c_str()); 
1

Вы можете использовать

result = atoi(line.c_str()); 
Смежные вопросы