J'ai lu une ligne d'un fichier et j'essaye de le convertir en int. Pour une raison quelconque, atoi()
(convertir une chaîne en entier) n'acceptera pas un std::string
en argument (peut-être un problème avec les chaînes vs c-strings vs char arrays?) - comment obtenir atoi()
pour que je puisse analyser ce fichier texte ? (va en tirer beaucoup d'ints).Vous ne pouvez pas faire atoi prendre une chaîne (chaîne vs. C-string?)
Code:
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;
}
Les problèmes causant la ligne est:
int columns = atoi(line);
qui donne l'erreur:
error: cannot convert
'std::string'
to'const char*'
for argument '1' to 'intatop(const char*)
'
Comment puis-je faire le travail atoi correctement?
EDIT: merci à tous, ça marche! nouveau code:
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;
}
demande aussi pourquoi le nom de fichier de chaîne = "data.txt"; fichier ifstream (nom de fichier) échoue, mais
ifstream file("data.txt");
œuvres? (je vais éventuellement être en train de lire le nom de fichier former la ligne de commande si besoin de faire ce pas une chaîne littérale)
N'utilisez jamais d'atoi. Il ne peut pas signaler les erreurs. Utilisez std :: strtoi, ou mieux, std :: stoi. – PlasmaHH
@PlasmaHH, Exactement, mais vous voulez dire «strtol». 'boost :: lexical_cast' pourrait aussi être une option. Il y a * une * question sur tout cela quelque part IIRC. – chris
atoi ne pas signaler les erreurs semble bénéfique, il essaie de fonctionner même si quelque chose ne va pas, plutôt que de me lancer une exception et de quitter. De www.cplusplus.com, trouvé que atoi est bon parce que "garantie de non-lancer: cette fonction ne jette jamais des exceptions." – user2333388