Cette fonction est un travail en cours conçu pour lire les données de stdin pour une calculatrice simple simple. La fonction fonctionne comme prévu lors de la saisie d'un opérateur et de deux opérandes: + 2 2. Elle lit aussi correctement à partir d'un fichier avec un formatage similaire sur la ligne de commande. Malgré cela, il segfualt si l'utilisateur frappe entrer sur la ligne de commande ou il atteint la fin d'un fichier. Je ne suis pas sûr d'où je me suis trompé? Qu'est-ce qui pourrait causer ce comportement?La fonction provoque une erreur de segmentation uniquement lorsque vous appuyez sur Entrée ou qu'elle atteint la fin d'un fichier.
void process_input()
{
while(!std::cin.eof())
{
std::string line;
std::string n;
getline(std::cin, line);
if (std::cin.fail())
break;
else if (line == "quit")
return;
std::istringstream stream(line);
std::vector<std::string> input_cpy(0);
while (stream >> n)
input_cpy.push_back(n);
//Clear global_input_cpy on each iteration and load the new line into it
global_input_cpy.clear();
for (int i = 0; i < input_cpy.size(); ++i)
global_input_cpy.push_back(input_cpy[i]);
if(input_cpy[0] == "+")
sum(std::stol(input_cpy[1]), std::stol(input_cpy[2]));
else if (input_cpy[0] == "*")
multiply(std::stol(input_cpy[1]), std::stol(input_cpy[2]));
else if (input_cpy[0] == "^")
exponent(std::stol(input_cpy[1]), std::stol(input_cpy[2]));
else
std::cout << "input '" << input_cpy[0] << "'" << " unrecognized. skipping." << "\n";
input_cpy.clear();
}
}
S'il vous plaît donner un exemple complet. 'global_input_cpy' n'est pas déclaré,' sum', 'multiply',' exponent' ne sont pas définis. –
'while (! Std :: cin.eof())' ne vous mordra probablement pas ici, mais sachez que cela peut conduire à des bugs intéressants et beaucoup de tiraillements. Plus ici: [Pourquoi iostream :: eof est-il dans une condition de boucle considérée comme incorrecte?] (Https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – user4581301