super schwere Frage !



  • Chris233 schrieb:

    WIESO BIN ICH DA FAUL ???!!! ?? 😡

    Es ist nicht schlimm, faul zu sein. Es ist schlimm, zu glauben, die anderen wären das nicht.



  • Leute, Leute, Leute.

    Versuchen wir es mal anders.
    Ich weiss, wie ich etwas in eine Datei schreibe und auch lese, aber das was ich wissen will, weiss ich nicht.
    Vielleicht versteht ihr mich nach dem kleinen Programm.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #define MAX 20
    #define input 20
    #define Pi 3.14159265359
    #define GRAD 5
    #define HOEHE 0.001
    #define BREITE 0.001
    #define NWINC 5
    #define NHINC 5
    #define LAY_EINS 0.02
    #define LAY_ZWEI 0.04
    #define LAY_DREI 0.06
    
    int main(int wieviel , char *argumente[] )
    {
     char *arg1=argumente[1];
     char *arg2=argumente[2];
     double a=0,b=0;
    
    /* jetzt kommen genug Funktionen, struckturen und ausweissungen */
    
    /* und auch berechnungen mit den definierten werten. */
    /* wenn der anwender aber die werte aendern will mit den er rechnet und das bei naechsten start noch die gleichen sein sollen, was nun */
    /* ach so und natuerlich soll ich ganz einfach damit rechnen wie z.b.*/
    
    a=a+GRAD;
    b= sqrt(GRAD+BREITE)*pow(GRAD,7);
    return 0;
    
    }
    

    Jetzt klar, was ich will ?



  • ein kleines bsp. wie es aussehen koennte:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define RETURN 10
    
    int main (void){
    	int iZahl,
    		iZaehler = 0 ;
    	char szChar[6] ;
    	FILE * hFile ;
    	if ((hFile = fopen ("c:\\test.dat", "rw")) == NULL){
    		printf ("fehler beim oeffnen der Datei") ;
    		return 1 ;
    	}
    	do{
    		szChar[iZaehler] = getc (hFile) ;
    		++iZaehler ;
    		if ((szChar[iZaehler - 1] == RETURN) || (feof (hFile))){
    			szChar[iZaehler - 1] = '\0' ;
    			iZahl = atoi (szChar) ; // in iZahl steht jetzt die Zahl
    			iZaehler = 0 ;
    		}
    	}
    	while (!feof (hFile)) ;
    	fclose (hFile) ;
    	return 0 ;
    }
    

    die test.dat muss dann so aussehen:

    12312
    23
    8282
    233
    99999

    immer mit enter die datensaetze von einander trennen. Wie man die Zahlen in die Datei reinschreibt musste auch kein problem sein, oder?
    Das ganze ist nur ein bsp. wie du es loesen koenntest. Viele wege fuehren nach Rom.



  • kleines beispiel leider sind noch paar fehler

    #include <stdio.h>

    int main(int argc, char **argv)
    {
    int grad;
    double breite;
    char qw;
    FILE *sfile;

    if ((sfile = fopen("save.txt", "r")) == NULL) { grad = 5; breite = 0.001; }
    else { fscanf(sfile, "%i %lf", &grad, &breite); }
    close(sfile);

    printf("werte >>%i %.3lf<< aendern? [j|n]: ", grad, breite);
    scanf("%c", &qw);
    if (toupper(qw) == 'J')
    {
    printf("1: "); scanf("%i", &grad);
    printf("2: "); scanf("%lf", &breite);
    }

    sfile = fopen("save.txt", "w");
    printf("werte >>%i %0.3lf<< gespeichert!\n", grad, breite);
    fprintf(sfile, "%i %0.3lf", grad, breite);
    close(sfile);

    return 0;
    }



  • @Chris233
    Ich versteh einfach dein Problem nicht. Du fragst, wie du Werte in einer Datei speichern kannst und diese auslesen kannst. Auf die Antwort sagst du, dass du weisst, wie du Werte in einer Datei speichern kannst und auslesen kannst um darauf dann wieder die gleiche Frage zu stellen.

    a) du bist ein Troll?
    b) du siehst den Wald vor lauter Bäumen nicht. Im Endeffekt sind die Optionen, von denen du sprichst nur Werte (ausser wenn du define nimmst, deswegen musst du dafür Variablen nehmen). Du schreibst diese einfach in eine Datei (zum Beispiel demo.config) und beim nächsten start liest du die Datei wieder aus bzw. initalisierst die Optionen mit den Default Werten, wenn die Datei nicht existiert.
    (btw. kein Grund rumzumeckern :))



  • Jarvis schrieb:

    XZ59 schrieb:

    übrigens war es RTFF wobei das F wohl auch kein Problem darstellen sollte 🙂

    Danke für die Erklärung.(QED)

    Und ich habe schon bewusst RTFM geschrieben. Wird wahrscheinlich öfter in Linux-Foren gebraucht.
    (M steht dabei für manual(oder evtl. auch für die man-Pages))

    das QED für quod erat demonstrandum steht ist mir bekannt. aber wöfür zum Teufel steht das RTFF???

    Danke



  • hat ungefähr die Bedeutung von RTFM (== "Read the fine|fucking manual") nur, dass das F am Ende für FAQ steht (also "Read the fine|fucking FAQ")

    bei so Fragen ist Google und die Jargon File recht nützlich 🙂



  • Chris233 schrieb:

    ...
    /* wenn der anwender aber die werte aendern will mit den er rechnet und das bei naechsten start noch die gleichen sein sollen, was nun */
    ...
    

    Jetzt klar, was ich will ?

    Natürlich nicht. Du hast z.B. mit keinem Wort erwähnt welche Werte beim nächsten Start gleich sein sollen. ( a und b? oder arg1 arg2 ? )
    Die defines kann man jedenfalls nicht ändern.
    Genau wie in all deinen vorherigen Postings hast du nur die Hälfte deines Problems erklärt.

    Ich versuche mal die Informationen, die über all deine vorherigen Postings verstreut sind zusammen zu puzzeln.

    Du willst irgendwelche Werte in einer Datei speichern und beim nächsten Programmstart sollen diese Werte irgendwelchen Variablen zugewiesen werden ohne die Datei zu öffnen. Das geht aber nicht. Wenn du Werte aus einer Datei in eine Variable speichern willst musst du die Datei öffnen und auslesen. Da gibt es keinen Trick um das zu umgehen.



  • du willst, dass die alten parameter noch vor dem start des programmes zur verfügung stehen, dh, der alte funktionsaufruf irgendwo geholt werden kann?



  • du musst die werte beim strart des prog aus der datei hollen und beim beenden des prog die geaenderte (oder auch nicht) wieder reinschreiben. ich habe zwei funktionen gecodet die genau das tun:

    #include <stdio.h>
    #include <stdlib.h>
    
    int DateiSchreiben	(int*, char*) ;
    int DateiLesen		(int*, char*) ;
    
    #define RETURN			10
    #define MAX_INT			10
    #define CHAR_LAENGE		6
    #define FILE_LESEN		"r"
    #define FILE_SCHREIBEN	"w"
    
    int main (void){
    	char	szFileName[] = "c:\\test.dat" ;
        int	 iZahlen[MAX_INT] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
    			iFor ;
        if (DateiSchreiben (iZahlen, szFileName)){
    		return 2 ;
    	}
    	if (DateiLesen (iZahlen, szFileName)){
    		return 1 ;
    	}
    	for (iFor = 0 ; iFor < MAX_INT ; iFor++){
    		printf ("%d\n", iZahlen[iFor]) ;
    	}
        return 0 ;
    }
    
    int DateiLesen (int *iRuckgabe, char *szFile){
    	int     iRuckgabeZaehler = 0,
    			iZaehler = 0 ;
        char	szChar[CHAR_LAENGE] ;
        FILE	*hFile ;
        if ((hFile = fopen (szFile, FILE_LESEN)) == NULL){
            printf ("Fehler beim oeffnen der Datei:\n") ;
    		printf ("%s\n", szFile) ;
            return 1 ;
        }
        do{
            szChar[iZaehler] = getc (hFile) ;
            ++iZaehler ;
            if ((szChar[iZaehler - 1] == RETURN) || (feof (hFile))){
                szChar[iZaehler - 1] = '\0' ;
                iRuckgabe[iRuckgabeZaehler++] = atoi (szChar) ;
                iZaehler = 0 ;
            }
        }
        while (!feof (hFile)) ;
        fclose (hFile) ;
    	return 0 ;
    }
    
    int DateiSchreiben (int *iOrginal, char *szFile){
    	int     iZaehler ;
        FILE	*hFile ;
        if ((hFile = fopen (szFile, FILE_SCHREIBEN)) == NULL){
            printf ("Fehler beim oeffnen der Datei:\n") ;
    		printf ("%s\n", szFile) ;
            return 1 ;
        }
    	for (iZaehler = 0 ; iZaehler < MAX_INT ; iZaehler++){
    		fprintf (hFile, "%d", iOrginal[iZaehler]) ;
    		if (iZaehler < (MAX_INT - 1)){
    			fprintf (hFile, "\n") ;
    		}
    	}
        fclose (hFile) ;
    	return 0 ;
    }
    


  • 😃

    Ich bin erstaunt wieviel Antworten ich doch bekomme.
    Also, ich habe mich entschieden.
    Ich habe mich mal noch an jemanden anderen gewendet und der hat mir noch ein paar Tips gegen.

    Ich werde die werte in eine Datei schreibe, sie bei oeffnen einlesen und aendern, wenn der benutzer andere Werte eingegeben hat.

    @kingruedi : bin kein Troll und die Baeume sind da, wo sie hingehoeren !!!
    und z.Z. arbeite ich an einem Programm, was Dateien oeffnet einliesst du wieder schliesst. Natuerlich weiss ich, wie man das macht. Ich wollte etwas anderes wissen. Dir sagt doch sicher die EXTERN-anweissung was. Ich wollte genauso auf die Werte in der Externen Datei zugreiffen.
    jetzt verstanden? Aber das geht scheinbar nicht.

    An den Rest, vielen Dank fuer die vielen Lustigen Antworten. 🙂 😉



  • Chris233 schrieb:

    Dir sagt doch sicher die EXTERN-anweissung was. Ich wollte genauso auf die Werte in der Externen Datei zugreiffen.
    jetzt verstanden?

    Selbstmodifizierender Code? Mutig.



  • SG1 schrieb:

    Selbstmodifizierender Code? Mutig.

    Wenn du es so willst, ja. Denn es gibts ja bisher nicht.



  • Chris233 schrieb:

    Ich werde die werte in eine Datei schreibe, sie bei oeffnen einlesen und aendern, wenn der benutzer andere Werte eingegeben hat.

    Das haben Dir hier in diesem Thread zig Leute schon vorher gesagt... 🙄



  • Hepi schrieb:

    Chris233 schrieb:

    Ich werde die werte in eine Datei schreibe, sie bei oeffnen einlesen und aendern, wenn der benutzer andere Werte eingegeben hat.

    Das haben Dir hier in diesem Thread zig Leute schon vorher gesagt... 🙄

    Nee,,wirklich ???

    Aber es ist nicht wirklich das, was ich machen wollte !!!!



  • ahhh bitte nicht aufhören! man ist das geil 😃 😃



  • Chris233 schrieb:

    Hepi schrieb:

    Chris233 schrieb:

    Ich werde die werte in eine Datei schreibe, sie bei oeffnen einlesen und aendern, wenn der benutzer andere Werte eingegeben hat.

    Das haben Dir hier in diesem Thread zig Leute schon vorher gesagt... 🙄

    Nee,,wirklich ???

    Aber es ist nicht wirklich das, was ich machen wollte !!!!

    Genau das war das Problem. Du warst außer Stande zu erklären, was du eigentlich machen wolltest.



  • Jeder kennt doch die ATOF anweissung. Jemand hat vereinbart, das diese Funktion in einer Header-datei vereinbart ist. Oder irre ich da?

    So, der Compiler holt die infos aus der Header-datei und uebersetzt dann.

    Ich wollte es sehr aehnliches.

    Ich moechte, das mein Programm, die Variablen aus einer externen Datei holt und sie auch dort hin schreibt, aber ich wollte nicht die Externe Datei erst oeffnen und dann auslesen.
    Ich wollte das die Variablen gleich mit Programmstart im speicher stehen und nicht in einer Datei.So das ich direckt zugreifen kann.



  • Ahhhhhhhhhhhhhhhh,
    ich bin zwar leider noch Anfänger und kann Chris233 nicht helfen
    aber jetzt kapiere ich was er meint.
    Von einer include-Datei war hier ja nie die Rede.
    Oder habe ich da etwas übersehen?
    Wenn ja, dann entschuldige ich mich.



  • Ich wollte das die Variablen gleich mit Programmstart im speicher stehen und nicht in einer Datei.So das ich direckt zugreifen kann.

    Da überschätzt Du aber die Freiheiten, die Betriebssysteme heutzutage zulassen.
    Die einzige Möglichkeit derartige Zugriffe zu machen, sehe ich über die Environment-Variablen (schau mal getenv() und Verwandte an).
    Das Schlüsselwort extern hat mit Deinen Vorstellungen nichts zu tun.


Anmelden zum Antworten