Я прочитал строку из файла и пытаюсь преобразовать ее в int. По какой-то причине atoi()
(преобразовать строку в целое число) не примет std::string
в качестве аргумента (возможно, некоторые проблемы со строками против c-строк против массивов символов?) — как я могу получить atoi()
работать правильно, чтобы я мог разобрать этот текстовый файл? (собирается извлечь из него много целых).
Код:
int main()
{
string line;
// string filename = "data.txt";
// ifstream file(filename)
ifstream file("data.txt");
while (file.good())
{
getline(file, line);
int columns = atoi(line);
}
file.close();
cout << "Done" << endl;
}
Линия, вызывающая проблемы:
int columns = atoi(line);
который дает ошибку:
ошибка: невозможно конвертировать
'std::string'
в'const char*'
для аргумента от ‘1’ до ‘intatop(const char*)
‘
Как мне заставить Атои работать правильно?
РЕДАКТИРОВАТЬ: спасибо всем, это работает! новый код:
int main()
{
string line;
//string filename = "data.txt";
//ifstream file (filename)
ifstream file ("data.txt");
while ( getline (file,line) )
{
cout << line << endl;
int columns = atoi(line.c_str());
cout << "columns: " << columns << endl;
columns++;
columns++;
cout << "columns after adding: " << columns << endl;
}
file.close();
cout << "Done" << endl;
}
Также интересно, почему
строка filename = «data.txt»;
файл ifstream (имя файла)
не удается, но
ifstream file("data.txt");
работает?
(Я в конечном итоге буду читать имя файла из командной строки, поэтому нужно сделать так, чтобы оно не было строковым литералом)
Для этого существует метод c_str.
int columns = atoi(line.c_str());
Кстати ваш код должен читать
while (getline (file,line))
{
...
То, что файл «хороший», не означает следующий getline преуспеет, только то, что прошлой Getline успешно. Используйте getline прямо в вашем состоянии while, чтобы узнать, действительно ли вы прочитали строку.
int columns = atoi(line.c_str());
использование line.c_str()
вместо просто line
Этот атой занимает const char*
не std::string