Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JohnAMH en 20 Octubre 2018, 20:13 pm



Título: Ayuda urgente con un problema de lectura de ficheros C++
Publicado por: JohnAMH en 20 Octubre 2018, 20:13 pm
Buenas, tengo un problema con la parte final de este código, y es que quiero que el programa me lea todos los préstamos que he hecho, pero solo me sale 1, más concretamente el primero. Por ejemplo, yo en el programa pongo información sobre 4 películas que quiero para alquilar, pero al final, cuando le pido al programa que me lea los datos del fichero txt, solo me lee los de la primera pelicula. Quisiera saber que poner para que me lea toda la información de las películas, y no solo de la primera.
Por cierto, también hay un pequeño error, que es que desde el "nombre de la pelicula" hasta "subtitulos?" los datos de sus respectivas preguntas son de la primera pelicula, pero después, a partir de "minutos", los datos los recoge de la última película que puse.

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. #include <fstream>
  5. #include <iomanip>
  6. #include <cctype>
  7.  
  8. typedef enum { action, adventure, scifi, comedy, drama, mystery, horror } tGenre;
  9. typedef enum { spanish, english, french, german, italian, portuguese } tLanguage;
  10.  
  11. tGenre readGenre();
  12. string genreToStr(tGenre genre);
  13. tLanguage readLanguage();
  14. string languageToStr(tLanguage lang);
  15.  
  16. int main() {
  17.  
  18. string gen;
  19. string language;
  20. string str;
  21. string nif;
  22. string date;
  23. string title;
  24. string director;
  25. tGenre genre;
  26. tLanguage lang;
  27. int minutes;
  28. int days;
  29. char aux;
  30. char result;
  31. bool subtitles = true;
  32. ofstream outputFile;
  33. ifstream inputFile;
  34.  
  35. outputFile.open("rentals.txt",ios::out);
  36. do {
  37. cout << "Film title (# to end): ";
  38. cin.sync();
  39. getline(cin, title);
  40. if (title != "#" ) {
  41. outputFile << title << endl;
  42. cout << "Film director: ";
  43. cin.sync();
  44. getline (cin, director);
  45. outputFile << director << endl;
  46. genre = readGenre();
  47. gen = genreToStr(genre);
  48. outputFile << gen << endl;
  49. lang = readLanguage();
  50. language = languageToStr(lang);
  51. outputFile << language << endl;
  52. cout << "Film with subtitles (y/n)?: ";
  53. cin >> aux;
  54. aux = toupper (aux);
  55. if (aux == 'Y') {
  56. outputFile << aux << endl;
  57. outputFile << true << endl;
  58. subtitles = false;
  59. }
  60. else {
  61. subtitles = true;
  62. }
  63. cout << "Minutes: ";
  64. cin.sync();
  65. cin >> minutes;
  66. outputFile << minutes << endl;
  67. cout << "Client NIF: ";
  68. cin.ignore();
  69. cin >> nif;
  70. outputFile << nif << endl;
  71. cout << "Rental Date: ";
  72. cin.sync();
  73. cin >> date;
  74. outputFile << date << endl;
  75. cout << "Rental Days: ";
  76. cin.sync();
  77. cin >> days;
  78. outputFile << days << endl;
  79. }
  80. } while (title != "#");
  81. outputFile << "#" << endl;
  82.  
  83. inputFile.open("rentals.txt",ios::in);
  84. while (!inputFile.eof() && aux == 'Y' || aux == 'N')  {
  85. int rental;
  86. getline(inputFile, title);
  87. getline(inputFile, director);
  88. getline(inputFile, gen);
  89. getline(inputFile, language);
  90. inputFile >> subtitles;
  91. inputFile >> minutes;
  92. getline(inputFile, nif);
  93. getline(inputFile, date);
  94. inputFile >> days;
  95. switch (aux) {
  96. case 'Y':
  97. if (subtitles == false) {
  98. rental = ++rental;
  99. cout << "Rental " << rental << endl;
  100. cout << title << " (" << director << "), " << gen << ", " << language << " (subt. Spanish), " << minutes << " min." << endl;
  101. cout << "Client: " << nif << " - " << date << ", " << days << " days" << endl;
  102. subtitles = true;
  103. }
  104. break;
  105. case 'N':
  106. if (subtitles == true) {
  107. rental = ++rental;
  108. cout << "Rental " << rental << endl;
  109. cout << title << " (" << director << "), " << gen << ", " << language << ", " << minutes << " min." << endl;
  110. cout << "Client: " << nif << " - " << date << ", " << days << " days" << endl;
  111. subtitles == false;
  112. break;
  113. }
  114. default:
  115. exit(1);
  116. }
  117. }
  118.  
  119. inputFile.close();
  120. outputFile.close();
  121.  
  122. return 0;
  123. }
Repito, lo único que me falla es la parte en el que el programa tiene que leer la información que hay en el fichero, es decir, la del inputFile.