Bonjour à tous je suis en train de faire le cours de c++. j’ai un soucis avec un des exercices celui se trouvant dans la partie "Attends que je t’attrape"
J’ai pensé à un code qui n’est pas celui donné en corrigé mais qui selon ma logique pourrait fonctionner. Hélas il ne fonctionne pas j’aimerais savoir mon erreur.
#include <fstream>
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
std::vector<std::string> lire_fichier(std::string const& nom_fichier)
{
std::vector<std::string> lignes{};
std::string ligne{ "" };
std::ifstream fichier{ nom_fichier };
if (!fichier)
{
throw std::runtime_error("Fichier impossible à ouvrir.");
}
while (std::getline(fichier, ligne))
{
lignes.push_back(ligne);
}
return lignes;
}
int main()
{
std::string nom_fichier{ "" };
std::cout << "Donnez un nom de fichier : ";
std::cin >> nom_fichier;
try
{
// Dans le try, on est assuré que toute exception levée
// pourra être traitée dans le bloc catch situé après.
auto lignes = lire_fichier(nom_fichier);
std::cout << "Voici le contenu du fichier :" << std::endl;
for (auto const& ligne : lignes)
{
std::cout << ligne << std::endl;
}
}
// Notez qu'une exception s'attrape par référence constante.
catch (std::runtime_error const& exception)
{
// On affiche la cause de l'exception.
std::cout << "Erreur : " << exception.what() << std::endl;
/*****/
std::cout << "Donnez un nom de fichier : ";
std::cin >> nom_fichier;
auto lignes = lire_fichier(nom_fichier);
std::cout << "Voici le contenu du fichier :" << std::endl;
for (auto const& ligne : lignes)
{
std::cout << ligne << std::endl;
}
/*****/
}
return 0;
}
PS: j’ai rajouté la zone entre /*/
selon moi une fois dans le bloc catch si l’on redemande un nom de fichier et qu’il est de nouveau incorrect on revient dans le bloc catch à nouveau mais mon programme se bloque si je veux rentrer un nouveau nom. Merci d’avance pour les réponses.
+0
-0