dateiarbeit - loeschen ...

vendui

Mitglied
hallo

ich moechte gern 2 dateien von dieser funktion loeschen lassen

ich frage nach dem dateinamen cin.getline(name)
und loesche diese - soweit geht es
aber soblad ich ein 2. mal in die funktion gehe überspringt er die cin.getline anweisung einfach
somit kann ich keine 2. datei loeschen ohne das programm neu zu starten ...

kann mir jemand sagen was ich falsch mache ?
(bitte nicht zu kompliziert - bin anfaenger)
danke ven




Code:
const MAXLINE=40;
char name[MAXLINE];

void loeschen()
{	cout << "Geben sie die Datei an, die geloescht werden soll" << endl;
	cin.getline(name, MAXLINE);
	
	char sicher;

	//sicherheitsrueckfrage
	cout << endl << "Die Datei " << name << " wird physikalisch geloescht !" << endl << "Sind sie sicher ? [j/n] : ";
	sicher = cin.get();
	cout << endl << endl;

	//bei j die datei loeschen
	if(sicher=='j')
	{	remove(name);
		cout << endl << "Die Datei " << name << " wurde erfolgreich geloescht !" << endl;
		cout << endl << "Weiter mit belibiger Taste";
	}

	//bei n den vorgang abbrechen
	if(sicher=='n')
	{	cout << "Vorgang abgebrochen !" << endl;
		Sleep(1500);
	}

	//fehlerbehandlung
	if(sicher!='j' && sicher!='n')
	{		cout << "Genben sie bitte \'j\' oder \'n\' ein";
	}

	getch();	
	system("cls");
	main();
 
Hi,

also ich habe momentan leider keinen Compiler zur Hand, aber das "main(); " in deiner Funktion löschen solltest du rausnehmen, ich gehe mal davon aus das deine MAIN die löschen Funktion aufruft, dann kehrt er da auch wieder hin zurück, wenn löschen fertig ist...

main -> löschen -> zurück zu main

So sollte eigendlich ein normaler Ablauf gehen... dann brauchst du aber nicht noch in der löschen Funktion das MAIN() schreiben, das macht er automatisch ;)

Ansonsten sehen ich soweit keinen Fehler... aber ich schaue nachher mal mit einem Compiler drüber...
 
naja das programm ist ja nicht so 100% linear
ich rufe die main funktion wieder weil darin mein auswahlmenu enthalten ist: also datei erstellen, loeschen etc.
gut man koennte auch eine eigene menu funktion machen...
 
Würde das dann so machen :

main()
{
while(!ende)
{
menü....
if(loeschen == true) //wenn er löschen soll dann....
loeschen();
}
}
 
moin


Du kannst main NICHT aus einer anderen Funktion aufrufen! Du kannst aber aus einer anderen Funktion wieder zu main zurückkehren. UNd das machst du dann am besten in einer Schleife wie MFC openGL es geschrieben hat.


mfg
umbrasaxum
 
moin


Dein löschen würde ich eher so machen:
Code:
void loaschen()
{
	cout << "Geben sie die Datei an, die geloescht werden soll" << endl;
	cin.getline(name, MAXLINE);

	char sicher;

	//sicherheitsrueckfrage
	cout << endl << "Die Datei " << name << " wird physikalisch geloescht !" << endl << "Sind sie sicher oder abbrechen ? [j/n/a] : ";
	sicher = cin.get();
	cout << endl << endl;

	cout << "Geben sie die Datei an, die geloescht werden soll" << endl;
	cin.getline(name, MAXLINE);

	char sicher;

	//sicherheitsrueckfrage
	while
	{
		cout << endl << "Die Datei " << name << " wird physikalisch geloescht !" << endl << "Sind sie sicher ? [j/n] : ";

		sicher = cin.get();
		cout << endl << endl;

		switch(sicher)
		{
		case 'j':
			remove(name);
			cout << endl << "Die Datei " << name << " wurde erfolgreich geloescht !" << endl;
			cout << endl << "Weiter mit belibiger Taste";
			break;

		case 'n':
			cout << "Vorgang abgebrochen !" << endl;
			Sleep(1500);
			break;

		case 'a':
			return;

		default:
			cout << "Genben sie bitte \'j\' oder \'n\' ein";
		}
	}
}


mfg
umbrasaxum
 
moin


Ach jetzt ist mir gerade aufgefallen wo dein Problem ist, und zwar ist dein
const MAXLINE=40;
char name[MAXLINE];

extern, sodass es bei dem zweiten Aufruf von löschen schon gefüllt ist und deshalb übersprungen wird! Also pack es mit in die löschen Funktion und dein Problem ist gelöst.


mfg
umbrasaxum
 
danke schonmal
hm also das habe ich mir auch gedacht mit den globalen varablen und ich habe es jetzt so gemacht wie du es gesagt hast - also lokal
aber es geht trotzdem nich ... beim 2. versuch überspringt er immernoch cin.getline

wenn es hilft... hier mal die main.cpp
einige funktionen sind noch kaothisch und nich fertig/falsch
einfach 2 dateien erstellen und dann beide hintereinander loeschen

Code:
void loeschen()
{
	const MAXLINE=40;
	char name[MAXLINE];
	cout << "Geben sie die Datei an, die geloescht werden soll" << endl;
	cin.getline(name, MAXLINE);

	char sicher;

	//sicherheitsrueckfrage

		cout << endl << "Die Datei " << name << " wird physikalisch geloescht !" << endl << "Sind sie sicher ? [j/n] : ";

		sicher = cin.get();
		cout << endl << endl;

		switch(sicher)
		{
		case 'j':
			remove(name);

			cout << endl << "Die Datei " << name << " wurde erfolgreich geloescht !" << endl;
			cout << endl << "Weiter mit belibiger Taste";
			break;

		case 'n':
			cout << "Vorgang abgebrochen !" << endl;
			Sleep(1500);
			break;

		case 'a':
			return;

		default:
			cout << "Genben sie bitte \'j\' oder \'n\' ein";
		}
	
	getch();	
	system("cls");	
}
 
Zuletzt bearbeitet:
moin


Poste mal dein ganzes Programm.
So kann ich keine Fehler sehen.
Du solltest, wenn du meinen Code übernimmst, auch den ganzen Code übernehmen denn die while Schleife ist nicht zum Spass mit drin.


mfg
umbrasaxum
 
Zurück