zahlenblöcke aus string auslesen und bearbeiten



  • schnuffi_1986 schrieb:

    (@ten)

    ok, es klappt doch, nur nicht wenn ich
    erg=strtok(str, " ");
    sag, wenn ich da ein zeichen wie "," oder "." o.ä. funktionierts, nur nicht mit nem leerzeichen. weiß du (oder jem. anderes) warum 😕 ?
    vielen dank 🙂 🙂

    so kannst du's anwenden

    void main()
    {
       char str[] = "3456 78935 5632 43289"; 
       char *token = strtok (str, " ");       // erstes token holen
       while (token)                          // solange tokens da sind...
       {
          printf ("%s\n", token);             // ...ausgeben und...
          token = strtok (0, " ");            // nächstes token holen
       }
    }
    

    aber bedenke: strtok setzt nullen in den string ein!
    also nicht bei stringkonstanten oder read-only speicher verwenden (vorher eventuell umkopieren)
    🙂



  • schnuffi_1986 schrieb:

    es gibt mir dann nur h aus wenn ich "h a l l o" eingebe. warum???

    Weil der Rest deiner Eingabe noch im Tastaturpuffer darauf wartet, gelesen zu werden (scanf() liest (so wie du es verwendet hast) nur bis zum ersten Whitespace - du benötigst fgets() oder scanf("%[^\n]",str); ).

    @ten: als alter Hast müsstest du eigentlich besser wissen, daß du hier für "void main()" erschossen werden kannst 😃



  • @ten: *erschiesz* *muhahaha* 😃 😃 😃
    @OP: ich würd' schleife, realloc, falscheingabe bricht ab...

    Greetz, Swordfish



  • Ich halte strtoul sowieso für die bessere Lösung.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int i, vals[4];
      char *s = "2345 6543 9876 3345";
    
      for (i = 0; i < 4; i++)
        { vals[i] = strtoul(s, &s, 10);
          printf("%u: %u\n", i, vals[i]);
        }
      return 0;
    }
    


  • CStoll schrieb:

    @ten: als alter Hase müsstest du eigentlich besser wissen, daß du hier für "void main()" erschossen werden kannst 😃

    ich weiss, aber die meisten compiler, die ich kenne, haben kein problem damit. codewarrior, iar, imagecraft, vc6, keil, greenhills finden 'void main' nicht verwerflich. nur der blöde gcc gibt'n warning, aber der muckt ja schon rum, wenn man am ende der datei das carriage-return weglässt.

    keksekekse schrieb:

    Ich halte strtoul sowieso für die bessere Lösung.

    nur wenn man's als zahlenwert braucht... 😉



  • Selbst wenn dein Lieblings-Compiler entsprechend tolerant mit dem ANSI-Standard umgeht, solltest du noch lange nicht jedem Neuling solche Flausen in den Kopf setzen ("void main()" ist genauso falsch wie "fflush(stdin);").



  • CStoll schrieb:

    ("void main()" ist genauso falsch wie "fflush(stdin);").

    'void main' ist doch harmlos. das ist doch nur so spezifiziert worden, damit 'main' was ans 'host environment' zurückgeben kann (man kann's aber auch mit exit() machen). 'fflush(stdin)' ist dagegen schon schlimmer...



  • dankeschön für die ganzen infos zu meinem problem ... es funktioniert jedenfalls vorerst, worüber ich sehr froh bin ...
    und was void main() und fflush(stdin) angeht ... hm ich stell mich mal dumm, weil ich c erst 1 semester hat und unser prof hat immer gemeint für uns würde void main (void) reichen und das dieses fflush(stdin) verdammt wichtig sei.
    darf ich fragen was daran so falsch is?
    dankeschön
    gruß schnuffi



  • lies die faq, da stehts.



  • ten schrieb:

    CStoll schrieb:

    ("void main()" ist genauso falsch wie "fflush(stdin);").

    'void main' ist doch harmlos. das ist doch nur so spezifiziert worden, damit 'main' was ans 'host environment' zurückgeben kann (man kann's aber auch mit exit() machen). 'fflush(stdin)' ist dagegen schon schlimmer...

    Naja, die Frage, ob man nicht Standardkonformen Blödsinn den man sich angewohnt hat, unbedingt weitergeben will...

    Greetz, Swordfish



  • Swordfish schrieb:

    Naja, die Frage, ob man nicht Standardkonformen Blödsinn den man sich angewohnt hat, unbedingt weitergeben will...

    naja, ich achte bei 'main' nicht so auf standardkonformität.
    aber das muss ja keiner nachmachen...
    ausserdem steht ja auch geschrieben:

    In a freestanding environment (in which C program execution may
    take place without any benefit of an operating system), the name
    and type of the function called at program startup are
    implementation-defined.
    

    demnach müsste ich bei jedem code, den ich poste, dazuschreiben: 'vorsicht! nur ohne betriebssystem oder ähnlichem starten'
    😉



  • Das wirklich gute an ANSI/ISO-C ist wohl, dass man in festen Teams wenigstens eine Diskussionsgrundlage hat, um sich Standards für das Team zu schaffen. Vielleicht sollten wir dem armen OP einfach sagen, mit int main( ); geht's fast immer 😉 ten, nix für ungut.

    Greetz, Swordfish



  • Swordfish schrieb:

    ...mit int main( ); geht's fast immer

    aber eben nur 'fast'.
    manch ein compiler findet's dann gar nicht lustig, wenn man das 'return' weg lässt 😉



  • ten schrieb:

    wenn man das 'return' weg lässt 😉

    Ein return, das keins ist: (Borland C 2.01 für DOS 1989)

    return(_AX);
    


  • Meingott, das waren noch Zeiten 😉
    Aber im Ernst, nennt mir einen Compiler beim Namen, der sich an einem

    int main( )
    {
        return 0;
    }
    

    stößt!?

    Greetz, Swordfish

    note-2-me: Abstimmungsthread Lieblingscompiler im Compilerforum starten *bg*



  • Swordfish schrieb:

    Aber im Ernst, nennt mir einen Compiler beim Namen, der sich an einem

    int main( )
    {
        return 0;
    }
    

    stößt!?

    beim *weglassen* des returns beschwert sich der CW: 'Warning: C1404 Return expected'.
    ein 'void main()' wird dagegen kommentarlos geschluckt...

    Swordfish schrieb:

    note-2-me: Abstimmungsthread Lieblingscompiler im Compilerforum starten *bg*

    mach auf...
    🙂


Anmelden zum Antworten