Programm Problem



  • Zuerst einmal hallo 🙂

    Ich habe nachfolgend ein kleines Programm geschrieben.

    #include "StdAfx.h"
    #define MAXLANGE 256
    
    void blattern(FILE *Datei1,int *count)
    {
    	char buf[MAXLANGE];
    	char VorBack;
    	int aktuell=1;
    	printf("-1- Vorblättern");
    	printf("-2- Zurückbättern");
    	scanf("%d", &VorBack);
    	switch (VorBack)
    	{	case 1 : *count=*count+1;
    				   printf("%3d | ",*count);
    				   while (fgets(buf, MAXLANGE, Datei1)!= NULL)
    					{
    						if(aktuell==*count)
    						{
    							fputs(buf, stdout);
    						}
    						aktuell++;
    					}
    			break;
    		case 2 : *count=*count-1;
    				   printf("%3d | ",*count);
    				   while(fgets(buf, MAXLANGE, Datei1)!= NULL)
    					{
    						if(aktuell==*count)
    						{
    							fputs(buf, stdout);
    						}
    						aktuell++;
    				   }
    			break;
    		default : break;}
    }
    
    void suchen(FILE *Datei1)
    {
    	char puf[MAXLANGE], buf[MAXLANGE];
    	int aktuell = 1;
    	printf("Wonach wollen Sie suchen:");
    	scanf("%s",puf);
    
    	while ( fgets(buf, MAXLANGE, Datei1) != NULL)
    	{
    		if(strstr(buf, puf) !=0)
    		{
    			printf("%3d	:	%s\n", aktuell, buf);
    		}
    		aktuell++;
    	}
    }
    
    void loschen(FILE  *Datei1, FILE *Datei2,int *count)
    {
    	char buf[MAXLANGE];
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    		if(aktuell!=*count)
    		{
    			fputs(buf,Datei2);
    		}
    		aktuell++;
    	}
    
    }
    
    void einfugen(FILE  *Datei1, FILE *Datei2,int *count)
    {
    	char buf[MAXLANGE];
    	char puf[MAXLANGE]="\n";
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    		fputs(buf,Datei2);
    		if(aktuell==*count)
    		{
    			fputs(puf,Datei2);
                            fputs("\n",Datei2);
    			aktuell++;
    		}
    		aktuell++;
    
    	}
    }
    
    void andern(FILE  *Datei1,FILE *Datei2, int *count)
    {
    	char buf[MAXLANGE];
    	char puf[MAXLANGE];
    	printf("Was wollen sie einfügen?");
    	scanf("%s",&puf);
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    
    		if(aktuell!=*count)
    		{
    			fputs(buf,Datei2);
    		}
    		else
    		{
    			fputs(puf,Datei2);
    			fputs("\n",Datei2);
    		}
    		aktuell++;
    	}
    }
    void kopieren()
    {
    	rename("test.txt","speicher.txt");
    	rename("kopie.txt","test.txt");
    	rename("speicher.txt","kopie.txt");
    }
    
    int main (void)
    {
    	char Dateiname1[MAXLANGE]="test.txt";
    	char Dateiname2[MAXLANGE]="Kopie.txt";
    	FILE *Datei1 = NULL, *Datei2 = NULL;
    	int input=0;
    	int count=1;
    	int *p_count= NULL;
    	p_count = &count;
    
    	do
    	{
    		printf("Was wollen sie machen?\n");
    		printf("-1- Zeile wechseln\n");
    		printf("-2- aktuelle Zeile aendern\n");
    		printf("-3- aktuelle Zeile loeschen\n");
    		printf("-4- nach aktuelle Zeile einfügen\n");
    		printf("-5- Wort suchen\n");
    		printf("-6- Programm beenden\n");
    		scanf("%d",&input);
    		switch(input)
    		{
    		case 1 : Datei1=fopen(Dateiname1, "r");
    				blattern(Datei1,p_count);
    				 fclose(Datei1);
    				break;
    		case 2 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 andern(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				 kopieren();
    
    				break;
    		case 3 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 loschen(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				kopieren();
    				break;
    		case 4 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 einfugen(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				 kopieren();
    
    				break;
    		case 5 : Datei1=fopen(Dateiname1, "r");
    				suchen(Datei1);
    				fclose(Datei1);
    				break;
    		case 6 : return EXIT_SUCCESS;
    		default: printf("Erneute eingabe!");
    				break;
    		}
    		}while(input!=6);
    return EXIT_FAILURE;	}
    

    An und für sich funktioniert das ganze. Jetzt ist aber mein Problem, dass das Programm mit drei festdefinierten Textdateien arbeiten muss, die ich vorher erstellen muss!Ich möchte aber, das ich vorher selber eine Datei öffnen/erzeugen kann, die anstelle der vordefinierten arbeitet, jedoch stehe ich gerade total auf dem Schlauch.

    Ich hoffe man kann mir hier helfen 🙂


  • Mod

    Dann nimmst du statt der fest eingegebenen Namen eben eine Variable. Wo ist das Problem?

    Übrigens ist der Formatspezifizierer in Zeile 13 falsch. In Zeile 96 ist das & fehl am Platz, jedoch sollte dies nichts ausmachen.



  • Möchtest du andere Dateinamen verwenden oder die Dateien neu anlegen?



  • Ich möchte keine anderen Dateinamen verwenden, ich möchte quasi dem Programm befehlen, das er vor der ganzen Schleife eine Datei öffnen und oder erzeugen soll, dies ist ganz wichtig. Jedoch soll das ganze mit dem Programm kompatibel sein

    Ich hab mal weiter daran gebastelt, jedoch kann es nur Dateien öffnen, die existieren, selber keine erzeugen.

    #include "StdAfx.h"
    #define MAXLANGE 256
    
    void blattern(FILE *Datei1,int *count)
    {
    	char buf[MAXLANGE];
    	char VorBack;
    	int aktuell=1;
    	printf("-1- Vorblättern");
    	printf("-2- Zurückbättern");
    	scanf("%d", &VorBack);
    	switch (VorBack)
    	{	case 1 : *count=*count+1;
    				   printf("%3d | ",*count);
    				   while (fgets(buf, MAXLANGE, Datei1)!= NULL)
    					{
    						if(aktuell==*count)
    						{
    							fputs(buf, stdout);
    						}
    						aktuell++;
    					}
    			break;
    		case 2 : *count=*count-1;
    				   printf("%3d | ",*count);
    				   while(fgets(buf, MAXLANGE, Datei1)!= NULL)
    					{
    						if(aktuell==*count)
    						{
    							fputs(buf, stdout);
    						}
    						aktuell++;
    				   }
    			break;
    		default : break;}
    }
    
    void suchen(FILE *Datei1)
    {
    	char puf[MAXLANGE], buf[MAXLANGE];
    	int aktuell = 1;
    	printf("Wonach wollen Sie suchen:");
    	scanf("%s",puf);
    
    	while ( fgets(buf, MAXLANGE, Datei1) != NULL)
    	{
    		if(strstr(buf, puf) !=0)
    		{
    			printf("%3d	:	%s\n", aktuell, buf);
    		}
    		aktuell++;
    	}
    }
    
    void loschen(FILE  *Datei1, FILE *Datei2,int *count)
    {
    	char buf[MAXLANGE];
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    		if(aktuell!=*count)
    		{
    			fputs(buf,Datei2);
    		}
    		aktuell++;
    	}
    
    }
    
    void einfugen(FILE  *Datei1, FILE *Datei2,int *count)
    {
    	char buf[MAXLANGE];
    	char puf[MAXLANGE]="\n";
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    		fputs(buf,Datei2);
    		if(aktuell==*count)
    		{
    			fputs(puf,Datei2);
    			aktuell++;
    		}
    		aktuell++;
    
    	}
    }
    
    void andern(FILE  *Datei1,FILE *Datei2, int *count)
    {
    	char buf[MAXLANGE];
    	char puf[MAXLANGE];
    	printf("Was wollen sie einfügen?");
    	scanf("%s",&puf);
    	int aktuell=1;
    	while( fgets(buf,MAXLANGE,Datei1) !=NULL)
    	{
    
    		if(aktuell!=*count)
    		{
    			fputs(buf,Datei2);
    		}
    		else
    		{
    			fputs(puf,Datei2);
    			fputs("\n",Datei2);
    		}
    		aktuell++;
    	}
    }
    void kopieren()
    {
    	rename("test.txt","speicher.txt");
    	rename("kopie.txt","test.txt");
    	rename("speicher.txt","kopie.txt");
    }
    
    void killNL(char *str)
    {
    	size_t p = strlen(str);
    	str[p-1] = '\0';
    }
    
    int main (void)
    {
    	char Dateiname1[MAXLANGE]="test.txt";
    	char Dateiname2[MAXLANGE]="Kopie.txt";
    	char filename0[MAXLANGE];
    	FILE *Datei1 = NULL, *Datei2 = NULL;
    	int input=0;
    	int count=1;
    	int *p_count= NULL;
    	p_count = &count;
    
    	printf ("Dazei zum Lesen: ");
    	fgets(filename0, MAXLANGE, stdin);
    	killNL(filename0);
    
    	do
    	{
    		printf("Was wollen sie machen?\n");
    		printf("-1- Zeile wechseln\n");
    		printf("-2- aktuelle Zeile aendern\n");
    		printf("-3- aktuelle Zeile loeschen\n");
    		printf("-4- nach aktuelle Zeile einfügen\n");
    		printf("-5- Wort suchen\n");
    		printf("-6- Programm beenden\n");
    		scanf("%d",&input);
    		switch(input)
    		{
    		case 1 : Datei1=fopen(filename0, "r");
    				blattern(Datei1,p_count);
    				 fclose(Datei1);
    				break;
    		case 2 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 andern(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				 kopieren();
    
    				break;
    		case 3 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 loschen(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				kopieren();
    				break;
    		case 4 : Datei1=fopen(Dateiname1, "r");
    				 Datei2=fopen(Dateiname2, "w");
    				 einfugen(Datei1,Datei2,p_count);
    				 fclose(Datei1);
    				 fclose(Datei2);
    				 kopieren();
    
    				break;
    		case 5 : Datei1=fopen(filename0, "r");
    				suchen(Datei1);
    				fclose(Datei1);
    				break;
    		case 6 : return EXIT_SUCCESS;
    		default: printf("Erneute eingabe!");
    				break;
    		}
    		}while(input!=6);
    return EXIT_FAILURE;	}
    

    Zeile 119-123 sind neu hinzugekommen
    Zeile 131 neu
    Zeile 138-140


  • Mod

    200 Zeilen größtenteils irrelevanter Code und das gleich zweimal, macht nur dass niemand deine Beiträge lesen wird. Hingegen solltest du mal etwas mehr Zeit in die Problembeschreibung investieren. Du hast jetzt zweimal gefragt. Das erste Mal so undeutlich und vage, dass du Antworten bekommen hast, die dir anscheinend nicht passten. Beim zweiten Mal die gleiche Frage anders formuliert. Was erwartest du nun für Antworten?

    Guck auch hier:
    http://www.c-plusplus.net/forum/136013
    http://www.c-plusplus.net/forum/200753



  • Mea culpa und ich hab mir die beiden Links durchgelesen.

    Ich versuche mich nun klarer zu fassen

    Ich kann mit dem Programm Dateien öffnen die existieren, ist soweit in Ordnung.

    Ich möchte aber, dass das Programm auch Dateien erstellen kann.



  • Guest 125 schrieb:

    Ich hab mal weiter daran gebastelt, jedoch kann es nur Dateien öffnen, die existieren, selber keine erzeugen.

    Datei2=fopen(Dateiname2, "w");
    

    öffnet die Datei deren Name in Dateiname2 steht zum schreiben. Wenn die Datei nicht existiert wird sie erstellt.
    Wenn die Datei existiert wird der Inhalt gelöscht.
    Genaueres unter http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
    Macht doch alles was du willst. Du musst dann nur noch Daten reinschreiben und die Datei wieder schließen.


Anmelden zum Antworten