strcmp() Problem
-
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
-
Laß doch das int i ganz weg in deinem Code
while(strcmp(test2, test1) == 0);
damit sollte dein Compiler klarkommen.
Mehrere Operationen in einer Zeile fördern nicht die Lesbarkeit
MfG f.-th.
-
f.-th. schrieb:
while(strcmp(test2, test1) == 0);
damit sollte dein Compiler klarkommen.
klar, endlosschleifen sind ja erlaubt.
-
Leute kann mir jemand sagen warum dieser einfacher fall nicht funktioniert?
Die Variablen sollen in der funktion "lese" ihr Wert erhalten und dann soll wieder in der main() funktion die gleichung c= a + b; gelöst werden.
Der compiler sagt dass man die Variablen erstmal initialisieren soll, wenn ich diese mit null "0" initialisiere bekomme ich im Programm dierekt bei der ersten Zahl angabe Programm absturz.
#include <stdio.h> int lese(int a, int b) { printf("Geben Sie eine Zahl fuer a ein: "); scanf("%i", a); printf("\nGeben Sie eine Zahl fuer b ein: "); scanf("%i", b); return (1); } void main() { int a; int b; int c; lese(a , b); c = a + b; printf("\n\nC ist gleich %i\n", c); }
-
Probier mal so:
int lese(int *a, int *b) //call-by-reference, Übergabe von Zeigern ... int a; int b; lese(&a , &b); }
Wenn du den Inhalt der Variablen in der Funktion ändern willst, dann musst du by-reference übergeben. Sonst (call-by-value) werden Kopien der Variablen angelegt und in der Funktion verwendet. Die Ursprungswerte werden also nicht verändert, das ist ja nicht was du willst.
-
_matze schrieb:
Probier mal so:
int lese(int *a, int *b) //call-by-reference, Übergabe von Zeigern ... int a; int b; lese(&a , &b); }
Wenn du den Inhalt der Variablen in der Funktion ändern willst, dann musst du by-reference übergeben. Sonst (call-by-value) werden Kopien der Variablen angelegt und in der Funktion verwendet. Die Ursprungswerte werden also nicht verändert, das ist ja nicht was du willst.
Vielen Dank es funktioniert, ehrlich gesagt das ist ein bischen verwirrend,
z.b wenn man statt int a, char a[5] nimmt dann darf man nicht mehr dieses & "und" vorne dran schreiben sonst zeigt der compiler fehler, aber ist es nicht das selbe?
int lese(char *a, int *b) //call-by-reference, Übergabe von Zeigern ... char a[5]; int b; lese(&a , &b); }
***********
Ich versuch mal selber auf meine Frage zu Antworten:
Man darf das & "und" Zeichen deswegen nicht vor a[5] stellen, weil das ein adressirungs zeichen ist der nähmlich einer bestimmten adresse ein Wert adressiert, da aber a[5] ein Array ist besteht er aus vielen adressen z.b
10001 10002 10003 10004 10005
der Compiler kann physisch nicht ein Wert einer Adresse adressiren die aber keine Adresse ist, sondern eine menge von Adressen in gegensatz zu int a;
Richtig??
-
Devis schrieb:
der Compiler kann physisch nicht ein Wert einer Adresse adressiren die aber keine Adresse ist, sondern eine menge von Adressen in gegensatz zu int a;
Hui, heftiger Satz!
Mein Vorschlag: Zieh dir mal ein gute Anfänger-Tutorial/-Buch 'rein, da wird die ganze Zeiger-Thematik ausführlich erklärt. Das kann man in diesem Rahmen nur schlecht vermitteln (und ehrlich gesagt wäre mir das einfach zu aufwendig
).
Hier findest du auch schon passende Lektüre:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html
-
_matze schrieb:
Hui, heftiger Satz!
Mein Vorschlag: Zieh dir mal ein gute Anfänger-Tutorial/-Buch 'rein, da wird die ganze Zeiger-Thematik ausführlich erklärt. Das kann man in diesem Rahmen nur schlecht vermitteln (und ehrlich gesagt wäre mir das einfach zu aufwendig
).
Hier findest du auch schon passende Lektüre:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html
Danke! Ich merke schon dass ich langsam aber sicher auf die nerven gehe, sogar mir selber
-
Das hat nix mit nerven zu tun, aber wie gesagt, entweder ich erkläre dir das hier in knappen Sätzrn und unvollständig, oder du liest dir was Richtiges durch und lernst dabei sogar was!