[ROZWIĄZANE] odczyt z pliku i wyświetlanie na ekranie

0

Cześć,
mam malutki problem, otóż poniższy kod nie działa tak jak powinien, a wydaje mi się że powinien działać dobrze :)

#include <stdlib.h>
#include <fstream>
#include <string.h>

using namespace std;

int main()
{
 char c;
 char str[256];
 ifstream is;

 do
 {

 cout << "Enter the name of an existing text file: ";
 cin.get (str,256);

 is.open (str);        // open file
 }
 while(!is.is_open());

   while (is.good())     // loop while extraction from file is possible
    {
     c = is.get();       // get character from file
     if (is.good())
     cout << c;
    }
   is.close();


 system("PAUSE");
 return 0;
}

Gdy podaję nazwę pliku który istnieje program poprawnie wyświetla znaki na ekranie, jednak gdy podaję nazwę niewłaściwą, wówczas program się zapętla ... Próbowałem również z goto jednak efekt taki sam jak powyżej.
Próbowałem również czyścić tablicę str[256] bo wydawało mi się, że może przetrzymuje wpisaną niepoprawną nazwę pliku, ale również nie działa. Czyściłem w ten sposób:

for (int i =0 ; i <256 ; i++)
{
str[i]='\0';
}

Macie pomysł, dlaczego nie działa ? Chodzi mi, żeby przy wpisaniu złej nazwy program pytał o nazwę ponownie i tak do skutku aż nazwa będzie poprawna.

0
#include <stdlib.h>
#include <fstream>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
 char c;
 char str[256];
 ifstream is;

 
 

 cout << "Enter the name of an existing text file: ";
 cin.get (str,256);

 is.open (str);        // open file
 


   while (is.good())     // loop while extraction from file is possible
    {
     c = is.get();       // get character from file
     if (is.good())
     cout << c;
    }
   is.close();


 system("PAUSE");
 return 0;
}
0

nie bardzo rozumiem Twoje zmiany w programie, usunąłeś pętle do while, hm tylko nie wiem dlaczego...
W sumie Twój program jest bardziej daleki od zamierzonego niż mój ;)

Stosując pętle do while chciałem osiągnąć takie działanie programu, że gdy podasz złą nazwę pliku, wówczas program wraca do ponownego pytania o nazwę pliku i tak do skutku aż nazwa będzie poprawna.

Chyba logiczne jest coś takiego:
do{
pytaj o nazwę pliku
pobieraj wpisaną nazwę
otwieraj plik
}
while (jest różne od poprawne otwartego pliku)

0
#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;

int main()
{
 char c;
string nazwa;
 ifstream is;

 do
 {

 cout << "Enter the name of an existing text file: ";
 cin >> nazwa;

 is.open(nazwa.c_str());        // open file
 }
 while(!is.is_open());

   while (is.good())     // loop while extraction from file is possible
    {
     c = is.get();       // get character from file
     if (is.good())
     cout << c;
    }
   is.close();


 system("PAUSE");
 return 0;
}
0

dokładnie o to mi chodziło,
program działa tak jak powinien.

Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1