Buchstabe einer Datei als Variable speichern



  • erst mehrere zeilen text
    dann ein * zum trennen
    und dann 1 buchstabe (kleines b)
    danach nichts mehr



  • Poste mal den kompletten Code.



  • ok, hier

    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
       FILE *quelle; 
       int c;
       char datei[20];
       long pos = 0;
           (quelle=fopen("datei.txt","a+")); 
           fseek(quelle, 0L, SEEK_SET);
       while( (c=getc(quelle)) != '*')
          putc(c,stdout);
          fseek(quelle, -1L, SEEK_CUR);
       while( (c=getc(quelle)) != EOF)
       if (c == 'b')
    	printf("gleich");
       if (c != 'b')
    	printf("ungleich");
    
    }
    

    Die datei sieht so aus

    text
    text
    text
    text
    text
    *
    b

    ist der letzte buchstabe der datei kein b kommt die meldung ungleich, ist er ein b lautet die ausgabe gleichungleich



  • Da fehlen immer noch die Klammern um das while, dann sollte es gehen.
    So wird nur die erste Anweisung nach dem while ausgeführt und es kommt
    natürlich doppelt.



  • ne, geht leider nicht

    wenn ich eine klammer um das while mach, gibts ne fehlermeldung
    und wenn ich welche um die if-anweisungen mache, dann wird die ausgabe wieder länger



  • Poste Code ... 🙂



  • hier:

    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
       FILE *quelle; 
       int c;
       char datei[20];
       long pos = 0;
           (quelle=fopen("datei.txt","a+")); 
    
       while( (c=getc(quelle)) != '*')
          {putc(c,stdout);}
          fseek(quelle, -2L, SEEK_END);
       while( (c=getc(quelle)) != EOF)
       	{if (c == 'b')
    		printf("gleich");
       	if (c != 'b')
    		printf("ungleich");}
    
    }
    


  • zefix, mach doch mal diese §%§&§%-Klammern rein, dann geht's:

    while( (c=getc(quelle)) != EOF)[b]{[/b]
           {if (c == 'b')
            printf("gleich");
           if (c != 'b')
            printf("ungleich");
    [b]}[/b]
    


  • aber das sind doch die gleichen wie ich hatte, nur das sie jetzt eine zeile drüber bzw. drunter stehen
    das sollte doch eigentlich egal sein, wo die stehen, oder?
    geht übrigens immer noch nicht.
    kann es vielleicht sein, das es irgendwie am compiler/OS liegt, dass es bei mir net geht?



  • Sorry - ich gebe das jetzt auf und buche das auf Deine Ignoranz, Beratungsresistenz und Doofheit.
    Lerne Word-Basic.

    Verplempere anderer Leute Zeit, nicht mehr meine.



  • wenn man es als beratung bezeichnet den code praktisch unverändert zurückzugeben, und zu behaupten, er funktioniere, dann kann man mich wirklich als beratungsresistent bezeichnen^^

    (wenn mir jemand erklärt wieso es einen unterschied macht, ob die { am ende der zeile steht oder am anfang der nächsten zeile, dann nehm ich alles zurück (zumindest mein compiler macht da anscheinend keinen unterschied))



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
    
       FILE *quelle;
       int c;
       char datei[20];
       long pos = 0;
    
       quelle=fopen("datei.txt","a+");
    
       while( (c=getc(quelle)) != '*')
       {
            putc(c,stdout);
       }
    
       fseek(quelle, -2L, SEEK_END);
    
       while( (c=getc(quelle)) != EOF)
       {
            if (c == 'b')
                 printf("gleich");
            if (c != 'b')
                 printf("ungleich");
       }
    }
    

    so hier der code bischen gescheid eingerückt... was geht jetzt nicht????

    P.S.: am ende solltest noch

    fclose(quelle);
    

    machen

    was passiert wenn du die erste while schleife und das fseek weg lässt? findest er dann das b?



  • BorisDieKlinge schrieb:

    while( (c=getc(quelle)) != '*')
       {
            putc(c,stdout);
       }
    

    besser so. ist lesbarer und provoziert keine 'assignment in condition' compiler-warnungen:

    for (;;)
    {
      int c = getc(quelle);
      if (c == '*')
         break;
      putc (c, stdout);
    }
    

    und dafür

    BorisDieKlinge schrieb:

    if (c == 'b')
       printf("gleich");
    if (c != 'b')
       printf("ungleich");
    

    gibts 'else'
    🙂



  • Hallo,

    -fricky- schrieb:

    BorisDieKlinge schrieb:

    while( (c=getc(quelle)) != '*')
       {
            putc(c,stdout);
       }
    

    besser so. ist lesbarer und provoziert keine 'assignment in condition' compiler-warnungen:

    Wenn es so geschrieben ist, dann sollte da eigentlich keine solche Warnung entstehen, welcher Compiler warnt denn hier trotzdem?

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    Wenn es so geschrieben ist, dann sollte da eigentlich keine solche Warnung entstehen, welcher Compiler warnt denn hier trotzdem?

    naja, die klammern um die zuweisung verhindern dies. ich würde es aber trotzdem so nicht hinschreiben.
    🙂



  • for (;;)
    {
      int c = getc(quelle);
      if (c == '*')
         break;
      putc (c, stdout);
    }
    

    oder so

    for(char c= getc(quelle); c != '*' ; c= getc(quelle))
       putc (c, stdout);
    

    ^^



  • BorisDieKlinge schrieb:

    oder so

    for(char c= getc(quelle); c != '*' ; c= getc(quelle))
       putc (c, stdout);
    

    ^^schwach. das 'putc' passt doch auch noch irgendwo in's for-statement mit rein.
    🙂



  • BorisDieKlinge schrieb:

    for(char c= getc(...
    

    und jetzt ausnahmsweise ein ernsthafter kommentar: du solltest dir angewöhnen, hier 'int' zu nehmen. in dem speziellen fall ist es zwar egal, ob char oder int, aber trotzdem...
    🙂


Anmelden zum Antworten