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 dankso 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 einemint 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...