• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis do pliku do wpisania określonego ziągu znaków

Object Storage Arubacloud
+1 głos
272 wizyt
pytanie zadane 25 maja 2021 w C i C++ przez Antytalent Początkujący (470 p.)
#include <iostream>
#include <fstream>

using namespace std;

int main()
{

    char tekst[99];
    std::ofstream file;
    file.open("plik.txt");
    do {
        file << tekst << endl;
    } while (tekst != "end");
    file.close();
    return 0;
}

Zapis ma się kończyć, gdy użytkownik wpisze np. "end". Próbowałem z pętlą do while, tylko uznałem, że to nie ma sensu. 

komentarz 25 maja 2021 przez Oscar Nałogowiec (29,320 p.)
A gdzie użytkownik coś wpisuje?
komentarz 25 maja 2021 przez Antytalent Początkujący (470 p.)
W 13 linijce
komentarz 25 maja 2021 przez Oscar Nałogowiec (29,320 p.)

W 13 linijce program zapisuje do pliku zawartość niezainicjowanej tablicy. Brakuje czegoś podobnego do:

cin >> tekst;

 

komentarz 25 maja 2021 przez Antytalent Początkujący (470 p.)
Czyli "file <<" nie może działać jak cin do pliku?
komentarz 25 maja 2021 przez Oscar Nałogowiec (29,320 p.)
A jak byś to sobie wyobrażał? Zapis to zapis, odczyt to odczyt.

1 odpowiedź

0 głosów
odpowiedź 26 czerwca 2021 przez Tomasz Sobczak Bywalec (2,830 p.)
edycja 26 czerwca 2021 przez Tomasz Sobczak
#include <iostream>
#include <fstream>
#include <string>

 
using namespace std;

int main()
{
    char tekst [ 99 ];
    std::ofstream file;
    file.open( "plik.txt" );
    if( !file ) cout << "Blad otwarcia pliku do zapisu!" << endl;
    else
    {
        while( true )   
        {
            cin >> tekst;                               //::::  ( A1 )
            if( !strcmp( tekst , "end" ) ) break; 
            file << tekst << endl;                      //::::  ( A2 )            
        }            
    }
    file.close();
    return 0;
}


/*

    *( A1 )* :: Brakujący Cin
    *( A2 )* :: Do porównywania tablic znaków można posłużyć się funkcją  "strcmp()"; 
    
    
*/

Czyli "file <<" nie może działać jak cin do pliku? 

Odpowiedź:  może ale wymagałoby to innego podejścia i wykorzystania własnego operatora. Jako dowód podam przykład sklecony na szybko: 

#include <iostream>
#include <fstream>
#include <string>

 
using namespace std;

class CT_fileSaver
{
public:
    ofstream file;
    

    CT_fileSaver() = default;
    void open( const string& fileName_A ) { file.open( fileName_A ); }
    void close() { file.close(); }


    operator bool() { return file.operator bool(); }   
};

ostream& operator<< ( CT_fileSaver& fileSaver_A , string& text_A  )
{
    cin >> text_A;
    if( text_A != "end" ) fileSaver_A.file << text_A;
    return fileSaver_A.file;
}   
 
int main()
{
    string tekst {};
    CT_fileSaver file;
    file.open( "plik.txt" );
    if( !file ) cout << "Blad otwarcia pliku do zapisu!" << endl;
    else
    {
        while( tekst != "end" )   
        {                                   
            file << tekst << endl;                                
        }            
    }
    file.close();
    return 0;
}

Ale to, że można, nie znaczy, że powinno się tak robić. Większość czasu w programowaniu spędza się przy debugerze więc lepiej nie utrudniać sobie sprawy nieintuicyjnym kodem.

 

 

Podobne pytania

0 głosów
1 odpowiedź 287 wizyt
pytanie zadane 13 listopada 2022 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 12 listopada 2022 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
0 głosów
1 odpowiedź 528 wizyt

92,589 zapytań

141,439 odpowiedzi

319,697 komentarzy

61,974 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...