Dukanos Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 Hallo zusammen, gleich mal vorne weg, die Suchfunktion hat nichts ergeben, also steinigt mich nicht gleich, weil ich euch mit sowas vermeidlich simplen langweile ^^ Ich habe das Problem, dass ich 2 zahlen in einer Zeile einlesen soll. Also z.B. "100 200" dumm nur, dass es nicht so ganz hinhaut. Ich hab hier mal das stück des codes, welches das erledigen sollte. Bin ich nur zu blind oder wo is der fehler? ------ int main(void) { int zahl, zahlu, zahlo; int n, i; char s[100], x[100], y[100]; printf("Geben sie 2 Zahlen ein: \n"); gets(s); i=0; /*schleife um die ganze Laenge des Strings zu durchlaufen*/ while(i<= strlen(s)) { /*schleife solange s an der Stelle i eine Zahl ist*/ if(isdigit(s)) { strcpy(x, s); } else { while(s != isdigit(s)) { i++; } strcpy(y, s); } i++; } printf("%c", x); printf("%c", y); ------- danke schonmal! Gruß Dukanos Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 lad mal bitte das komplette c-file hoch!!! und erklär mal bitte detailliert, was du eingeben möchtest und was am ende raus kommen soll. Zitieren
carstenj Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 Hallo, ich werde mit Warnung geradeso überschüttet, wenn ich das kompiliere. Vielleicht solltest du dir mal die genaue Syntax von strcpy ansehen. Gets ist übrigens auch gefährlich. Zitieren
Dukanos Geschrieben 1. Dezember 2005 Autor Geschrieben 1. Dezember 2005 Zu der Sache mit "gets", dessen bin ich mir bewusst, aber mir wurde es in diesem Fall empfohlen, weil scanf auch nicht das gelbe vom Ei wäre :-) char *strcpy(char *deststr, char *srcstr); ich hab mir auch schon überlegt anstatt strcpy einfach nur direkt x = s zu schreiben... dann gibts keine warnungen mehr, allerdings funktionierts immer noch nicht. Ich versuche aus dem eingegebnen string s[], die beiden zahlen herauszufiltern. Zahl 1 soll in x[] gespeichert werden und zahl 2 in x[] und im anschluss sollen sie noch ausgegeben werden. Über Fehleingaben mach ich mir später noch Sorgen :-) (Im späteren verlauf des programms sollen die beiden zahlen die ober- und untergrenze eines Zahlenbereichs angeben bei dem dann jede zahl in seine Primfaktoren zerlegt wird... aber das hat hiermit eigentlich nichts zu tun) Von der Logik her gibt doch die erste while-schleife an, dass er s[] in seiner kompletten länge durchläuft. Dann wird geprüft, ob es sich bei der ersten stelle um eine zahl handelt, wenn ja, dann kopiert er die zahl an der stelle s nach x ansonsten. Dann "else" und die 2te while-schleife: sobald er keine zahl mehr findet soll er den s[] so lange durchlaufen, bis wieder eine zahl kommt und die speichert er dann nach y[] --- habt ihr spontan ne bessere idee wie man´s machen könnte? Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 es wird eingegeben: "TEXT[ZAHL]TEXT[ZAHL]" und jetzt die beiden zahlen abspeichern. hab ich das richtig verstanden? sind das zahlen oder ziffern? einstellig oder mehrstellig?..die eigegeben werden? Zitieren
Dukanos Geschrieben 1. Dezember 2005 Autor Geschrieben 1. Dezember 2005 Jepp, die beiden zahlen sollen beliebig lange sein (allerdings im Int-bereich :-)) getrennt mit leerzeichen oder irgeneinem anderen zeichen. z.B. eben "100 200" oder "100 leeeeeerzeichen 200", "100-200", "100xyz200" usw. habt etwas geduld mit einem anfänger ^^ Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 aso,.... jetzt raff ich erst mal was du willst. hintereinander zwei zahlen eingeben mit einem trennzeichen und dann beide zahlen seperat abspeichern. leg mal bitte ein bestimmtes trennzeichen fest. dann ist das auch nicht so schwer. kannst ruhig mit scanf arbeiten. - speicherst die eingabe in einen char[] ab. - benutzt die funktion "strtok()" und gibst da dein trennzeichen ein, um die beiden zahlen auseinander zu bekommen und speicherst jede zahl in ein seperaten char[] ab - dann kannst du dir mit der funktion "atoi()" die zahlen, die momentan noch als char gespeichert sind, als int zurückgeben lassn und in ein int speichern Zitieren
Dukanos Geschrieben 1. Dezember 2005 Autor Geschrieben 1. Dezember 2005 ok, ich werd´s mal auf die art versuchen. Danke! Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 #include <stdio.h> #include <string.h> /* benötigt für strcpy */ #include <stdlib.h> /* benötigt für atoi */ #define TRENNZEICHEN ";" /* define um das trennzeichen zu ändern, einfach was in den anführungsstrichen steht ersetzen um ein anderes trennzeichen zu benutzen (können auch mehrere sein) */ int main(void){ int iZahl1, iZahl2; char sEingabe[100], sZahl1[100], sZahl2[100]; char *token; printf("Bitte geben Sie 2 Zahlen mit \";\" getrennt ein:"); fflush(stdin); /* löscht den tastaturpuffer */ gets(sEingabe); /* eingabe der zahlen als CHAR */ token = strtok(sEingabe, TRENNZEICHEN); /* hier sucht man nach dem trennzeichen und kopiert den string bis zum ... */ strcpy(sZahl1, token); /* ... trennzeichen in ein anderen char[] */ token = strtok(NULL, TRENNZEICHEN); /* hier wieder suchen ... (NULL bedeutet, dass er vom letzten token ... */ strcpy(sZahl2, token); /* ... weiter macht) */ iZahl1 = atoi(sZahl1); /* hier die zahl, die in sZahl1 enthalten ist, in ein integer speichern */ iZahl2 = atoi(sZahl2); printf("%d\n", iZahl1); /* ausgabe */ printf("%d\n", iZahl2); } ist jetzt hier leider nicht richtig formatier, aber so funzt es auf jeden fall! viel spaß! Zitieren
carstenj Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 Hallo, Zu der Sache mit "gets", dessen bin ich mir bewusst, aber mir wurde es in diesem Fall empfohlen, weil scanf auch nicht das gelbe vom Ei wäre :-) Die Alternative zu gets heisst ja auch nicht scanf, sondern fgets(): BUGS Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead. In meiner man-Page zu strtok steht Folgendes: BUGS Never use these functions. If you do, note that: These functions modify their first argument. These functions cannot be used on constant strings. The identity of the delimiting character is lost. The strtok() function uses a static buffer while parsing, so it's not thread safe. Use strtok_r() if this matters to you. Nur so als Hinweis. Ich denke es wäre schon besser, sich seine eigene Trennfunktion zu schreiben. Diese Konstrukt... fflush(stdin); ...erzeugt undefiniertes Verhalten: http://www.c-plusplus.de/forum/viewtopic-var-t-is-39349.html Zitieren
Dukanos Geschrieben 1. Dezember 2005 Autor Geschrieben 1. Dezember 2005 Vielen Dank auf jeden Fall! Bei mir hauts soweit hin und mehr wollt ich gar nicht! :bimei Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 @ carstenj wenn dass so ist, kann man ja fast keine funktion mehr benutzen.... ich sag mal, für den hausgebrauch und kleinere sachen wirds schon funktionieren.... Zitieren
carstenj Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 Hi, @ carstenj wenn dass so ist, kann man ja fast keine funktion mehr benutzen.... ich sag mal, für den hausgebrauch und kleinere sachen wirds schon funktionieren.... Natürlich ist es ein Unterschied, ob man eine Businessapplication schreibt, oder für den Hausgebrauch ein wenig rumfrickelt. Es muss natürlich jeder für sich selbst entscheiden, ob er sich an bestimmte Konvention hält oder nicht. Nur wird die Fehlersuche bei größeren Programmen nicht gerade leichter. Zitieren
IceDuck Geschrieben 1. Dezember 2005 Geschrieben 1. Dezember 2005 ich sag mal, wenn man weiß was und wieviel eingegeben wird und es alles noch überschaubar ist reicht das aus. ist klar, wenn man ne größere applikation schreibt, dass man dann eventuell was eigenes schreibt. trotzdem danke für die hinweise. ich selbst wusste das nicht alles. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.