Zakończenie zapisywania do pliku konkretnym ciągiem znaków.

0

Witam,

Potrzebuje zakończyć program zapisywania do pliku tak żeby program kończył działanie po wpisaniu konkretnego ciągu znaków np. EXIT a nie CTRL+Z, jak mam to do tej pory.

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

using namespace std;

void fileWrite()
{
string nazwaplik;
char a;
cout << "Podaj nazwe pliku:\n";
cin >> nazwaplik;
fstream plik((nazwaplik + ".txt").c_str(), ios::app);

if (plik)
{
	streambuf *buf = plik.rdbuf();
	cout << "Wpisz tekst:\n";

	while ((a = getchar()) != EOF)
	{
		buf->sputc(a);
	}
	plik.close();
}

}

int main(void)
{
char b = '\0';
cout << "*** PROGRAM ZAPISUJACY DO PLIKU ";
cout << endl;
cout << "
Aby zakonczyc wcisnij CTRL+Z ***\n";
cout << endl;

do 
{
	fileWrite();
	cout << "Rozpoczac od nowa? (t/n):\n";
} 
while (getchar() != 'n');
return 0;

}

0

Problem w tym:

int a;

Może lepiej tak:

#include <iostream> 
#include <fstream>
#include <string>
using namespace std;

int main()
  {
   cout<<"*** PROGRAM ZAPISUJACY DO PLIKU ***"<<endl;
   while(true)
     {
      cout<<"Podaj nazwe pliku (pusta nazwa - koniec): ";
      string filename;
      getline(cin,filename);
      if(!filename.length()) break;
      filename+=".txt";
      ofstream file(filename.c_str(),ios::app);
      if(file)
        {
         cout<<"*** Aby zakonczyc wcisnij CTRL+Z ***"<<endl;
         file<<cin.rdbuf();
        }
      else cout<<"Niepoprawna nazwa pliku"<<endl;
     }
   return 0;
  }

Zadawaj pytania w postach

const char stop[]="\nexit\n";
fstream fout(filename.c_str(),ios::app);
for(unsigned p=0;;)
  {
    ch=getchar();
    fout<<ch;
    if(stop[p]!=ch) p=0;
    else if(++p>=sizeof(stop)-1) break;
  }

albo wczytuj słowami:

for(string word;(cin>>word)&&(word!="exit");) fout<<word<<' ';

tylko że problem w tym że gubisz spacje tabulacje i entery. Można również czytać wierszami: for(string line;(getlline(cin,line))&&(line!="exit");) fout<<word<<' ';

0

może spróbuj tak:

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

using namespace std;

int main(){
    string nazwapliku;
    string a;
    
    cout << "* PROGRAM ZAPISUJACY DO PLIKU *" << endl;
    cout << "* Aby zakonczyc wpisz: \"exit\"" << endl;
    
    cout << "Podaj nazwe pliku: ";
    cin >> nazwapliku;
    
    fstream plik( (nazwapliku+".txt").c_str(), ios::out );
    
    while(a != "exit") {
            
            cout << "Wpisz tekst: ";
            getline(cin, a);
            
            if(a != "exit") {
                 plik << a << endl;
            }
            
    }
    
    plik.close();
    return 0;
}
0

gabriel_synowkafoo dzięki za pomoc pokombinowałem i połączałem trochę od Ciebie trochę od siebie i osiągnąłem to co chciałem:), program kończy się po wpisaniu EXIT, oraz pyta czy utworzyć kolejny plik czy zamknąć(t/n), pozdrawiam.

0

Może komuś się przyda.
Program tworzy plik .txt o podanej przez użytkownika nazwie, i umożliwia wpisanie ciągu znaków, po wpisaniu 'exit', program pyta czy zamknąć lub czy utworzyć nowy plik (t/n).

#include "stdafx.h"
#include <iostream> 
#include <fstream>
#include <istream>
#include <string>

using namespace std;

void zapisplik()
{
	string nazwaplik;
	string a;
	cout << "Podaj nazwe pliku:\n";
	cin >> nazwaplik;
	fstream plik((nazwaplik + ".txt").c_str(), ios::app);
	if (plik)
	{
		cout << "Wpisz tekst:\n";
		while (a != "exit")
		{
			getline(cin, a);
			if (a != "exit")
			{
				plik << a << endl;
			}
		}
	}
}
int main(void)
{
	char b = '\0';
	cout << "*** PROGRAM ZAPISUJACY DO PLIKU ***";
	cout << endl;
	cout << "*** Aby zakonczyc lub utworzyc nowy plik wpisz: exit ***\n";
	cout << endl;
	do
	{
		zapisplik();
		cout << "Rozpoczac od nowa? (t/n):\n";
	} while (getchar() != 'n');
	return 0;
}

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