strcmp() Problem
-
Das strcmp funktioniert schon. Wenn die Strings gleich sind, wird 0 zurückgegeben. Den Fehler "Error: str!=0" musst du aber nochmal erklären...
Btw, pack das goto wieder ein und löse es mit einer while-Schleife (oder do-while).
-
bin doch noch halbwach:
warum void main und nicht int main?
Was hast du hier vor
doc=fopen("C:\\", "w");
MfG f.-th.
-
_matze schrieb:
Das strcmp funktioniert schon. Wenn die Strings gleich sind, wird 0 zurückgegeben. Den Fehler "Error: str!=0" musst du aber nochmal erklären...
Btw, pack das goto wieder ein und löse es mit einer while-Schleife (oder do-while).
Hallo, ich habe jetzt eine do while schleife verwendet aber das Problem ist immer noch nicht beseitig, kommt immer noch der selbe Fehler:
#include <stdio.h> #include <string> void main() { char test1[5]={""}; char test2[6]={"nein"}; struct tabelle{ char Name[10]; char Vorname[10]; char Strasse[15]; char Hausnummer[10]; char Stadt[10]; }spravka; int i = 0; do { i=(strcmp(test2, test1)); printf("\nWie ist Ihr Name?:"); scanf("%s", spravka.Name); printf("\nWie ist Ihr Vorname?:"); scanf("%s", spravka.Vorname); printf("\nGeben Sie bitte ihre Strasse ein!:"); while(gets(spravka.Strasse)[0]=='\0'); sscanf(spravka.Strasse,"%s"); printf("\nWie ist Ihre Hausnummer?:"); scanf("%s", spravka.Hausnummer); printf("\nGeben Sie bitte Ihre Stadt ein:"); scanf("%s", spravka.Stadt); printf("\n\nBitte ueberpruefen Sie ihre Daten!\n\n"); printf("%s ""%s\n""%s " "%s\n" "%s\n", spravka.Name, spravka.Vorname, spravka.Strasse, spravka.Hausnummer, spravka.Stadt); printf("\n\nSind Ihre Daten Korrekt? ja/nein: "); scanf("%s", &test1); }while(i<1); FILE *doc; doc=fopen("C:\\", "w"); fprintf(doc,"%s\n", spravka.Name); fprintf(doc,"%s\n", spravka.Vorname); fprintf(doc,"%s\n", spravka.Strasse); fprintf(doc,"%s\n", spravka.Hausnummer); fprintf(doc,"%s\n", spravka.Stadt); fclose(doc); printf("\n\nDatei geschrieben!\n"); }
-
Peinlich,,
ich hab vergessen an dieser Stelle
doc=fopen("C:\\", "w");
den die datei anzugeben, wohin die Daten geschrieben werden sollen!
Es muss heißen:doc=fopen("C:\\dokument.txt", "w");
Es lag nicht an strcmp(),, jetzt funktioniert alles!
Danke!
-
Halt doch nicht, jetzt wird das Programm aufgeführt und datei geschrieben, aber es verhält sich so als ob das Programm die do while schleife nicht sieht, also als on sie ständig auf "true" ist... also jetzt ist das ein strcmp problem!!!
hmm ich komme nicht weiter!
-
du mit deiner fixen Idee strcmp()
#include <stdio.h> #include <string.h> // wenn C dann C-Header - wenn C++ dann ... int main() // warum was anderes? { char test1[5]; char test2[]={"nein"}; struct tabelle{ char Name[10]; char Vorname[10]; char Strasse[15]; char Hausnummer[10]; char Stadt[10]; }spravka; int i = 0; do { printf("\nWie ist Ihr Name?:"); scanf("%s", spravka.Name); printf("\nWie ist Ihr Vorname?:"); scanf("%s", spravka.Vorname); printf("\nGeben Sie bitte ihre Strasse ein!:"); while(gets(spravka.Strasse)[0]=='\0'); sscanf(spravka.Strasse,"%s"); printf("\nWie ist Ihre Hausnummer?:"); scanf("%s", spravka.Hausnummer); printf("\nGeben Sie bitte Ihre Stadt ein:"); scanf("%s", spravka.Stadt); printf("\n\nBitte ueberpruefen Sie ihre Daten!\n\n"); printf("%s ""%s\n""%s " "%s\n" "%s\n", spravka.Name, spravka.Vorname, spravka.Strasse, spravka.Hausnummer, spravka.Stadt); printf("\n\nSind Ihre Daten Korrekt? ja/nein: "); scanf("%s", &test1); // hier gibst du erst test1 ein i=(strcmp(test2, test1)); // deshalb Abfrage erst hier }while(i == 0); FILE *doc; doc=fopen("docu.txt", "w"); // warum willst du ins Stammverzeichnis? fprintf(doc,"%s\n", spravka.Name); fprintf(doc,"%s\n", spravka.Vorname); fprintf(doc,"%s\n", spravka.Strasse); fprintf(doc,"%s\n", spravka.Hausnummer); fprintf(doc,"%s\n", spravka.Stadt); fclose(doc); printf("\n\nDatei geschrieben!\n"); }
MfG f.-th.
-
#include <string.h> // wenn C dann C-Header - wenn C++ dann ...
Bei mir steht ja ein C header oder?
int main() // warum was anderes?
Wenn man int vor main stellt dann möchte das Programm wenn es ausgeführt wird ein wert zurück geben, deshalb muss man es erst z.B. um return 1; erweitern, bei void braucht man das nicht.
deshalb Abfrage erst hier
Hab ich auch schon gedacht aber es hat trotzdem irgendwie keine auswirkung auf do while schleife, steht immer noch irgendwie auf "true"
warum willst du ins Stammverzeichnis?
Ich habs so gelernt :)... aber jetzt weiß ich dass es auch anders geht, danke!
-
Devis schrieb:
Bei mir steht ja ein C header oder?
Nein, bei dir steht <string>, nicht <string.h>...
Devis schrieb:
Wenn man int vor main stellt dann möchte das Programm wenn es ausgeführt wird ein wert zurück geben, deshalb muss man es erst z.B. um return 1; erweitern, bei void braucht man das nicht.
void main() gibt es aber nicht. Die meisten Compiler akzeptieren das zwar, falsch ist es trotzdem (und es ist möglich, dass dein Programm mit einem anderen Compiler einen Fehler ausspuckt). Außerdem hat der ja auch einen Grund. Manchmal will man die Rückgabe schließlich verarbeiten...
-
Führe das Programm auf der Kommandozeile aus.
Bei einigen Editoren oder IDEs funktionieren nicht alle Konsolenprogramme
nach run, go, ausführen oder was auch immer da steht.Mein letzter Quelltext sollte funktionieren, wenn du bei do-while "nein" oder
alternativ was anderes eingibst. Also "nein" komplett mit allen 4 Buchstaben
Wenn du das nur als "j" oder "n" haben willst, programmier es halt entsprechendMfG f.-th.
-
_matze schrieb:
void main() gibt es aber nicht. Die meisten Compiler akzeptieren das zwar, falsch ist es trotzdem ...
ich weiss echt nicht, warum sich dieses gerücht so hartnäckig hält.
c-standard schrieb:
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.also, auch 'void main()' ist möglich.
-
+fricky schrieb:
also, auch 'void main()' ist möglich.
Aber unportabel und daher sollte man es nie nie niemals machen, außer man kann wirklich nicht anders.
-
rüdiger schrieb:
...nie nie niemals...
ach, quark. zeig mir ein reales beispiel (keine konstruierten fälle), wo 'void main' ärger macht. ich hab's noch nie erlebt.
-
f.-th. schrieb:
Mein letzter Quelltext sollte funktionieren, wenn du bei do-while "nein"
MfG f.-th.
Es funktioniert nicht, ich meine da ist immer noch das selbe Problem, die do while schleife steht aus irgendeinem Grung auf true, egal was man eingibt, "ja" oder "nein", das Program setzt mit dem Erstellen der Datei docu.txt fort...
-
bei mir funzt die f-th variante
-
anonymouse schrieb:
bei mir funzt die f-th variante
Jetzt hab ich das Problem gelöst, so funktioniert es:
#include <stdio.h> #include <string.h> int main() { char test1[5]; char test2[]={"nein"}; struct tabelle{ char Name[10]; char Vorname[10]; char Strasse[15]; char Hausnummer[10]; char Stadt[10]; }spravka; int i; do { printf("\nWie ist Ihr Name?:"); scanf("%s", spravka.Name); printf("\nWie ist Ihr Vorname?:"); scanf("%s", spravka.Vorname); printf("\nGeben Sie bitte ihre Strasse ein!:"); while(gets(spravka.Strasse)[0]=='\0'); sscanf(spravka.Strasse,"%s"); printf("\nWie ist Ihre Hausnummer?:"); scanf("%s", spravka.Hausnummer); printf("\nGeben Sie bitte Ihre Stadt ein:"); scanf("%s", spravka.Stadt); printf("\n\nBitte ueberpruefen Sie ihre Daten!\n\n"); printf("%s ""%s\n""%s " "%s\n" "%s\n", spravka.Name, spravka.Vorname, spravka.Strasse, spravka.Hausnummer, spravka.Stadt); printf("\n\nSind Ihre Daten Korrekt? ja/nein: "); scanf("%s", &test1); }while(i=(strcmp(test2, test1)) == 0); FILE *doc; doc=fopen("docu.txt", "w"); fprintf(doc,"%s\n", spravka.Name); fprintf(doc,"%s\n", spravka.Vorname); fprintf(doc,"%s\n", spravka.Strasse); fprintf(doc,"%s\n", spravka.Hausnummer); fprintf(doc,"%s\n", spravka.Stadt); fclose(doc); printf("\n\nDatei geschrieben!\n"); return 1; }
Da gibt es noch ein kleines Problem, wenn man die .exe datei erstellt und versucht das Programm aus, dann kommt es an dieser stelle:
while(gets(spravka.Strasse)[0]=='\0'); sscanf(spravka.Strasse,"%s");
zu absturz, ich verstehele diese zeile selber erlich gesagt nicht, gibt es eine einfachere Methode strings zu lesen und und leerstellen zu ignorieren, also im prinzip die zeilen übernehmen so wie man sie eingibt?
-
das ist doch käse und gets ist sowieso käse
-
anonymouse schrieb:
das ist doch käse und gets ist sowieso käse
was meinst du mit käse
???
-
kann mir denn niemad helfen?
wo kann man das nachlesen wie die funktion sscanf() mit dieser
while(gets(spravka.Strasse)[0]=='\0'); kommuniziert...while(gets(spravka.Strasse)[0]=='\0'); sscanf(spravka.Strasse,"%s");
ich verstehe die logik dahinter nicht...
-
die sscanf zeile kannste auch weglassen, einmal wegen dem semikolon hinter der while-schleife und zum anderen, weil die sscanf parameter unvollständig sind.
-
und warum man gets nicht nehmen sollte, kannst du auf jeder dritten c-seite nachlesen.
z.b. hier:
http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/c_025_000.htmnimm lieber fgets