Wenn keine Eingabe
-
NewC++ schrieb:
Hallo,
ich schreibe gerade ein einfaches Programm. Und darin soll unter anderem ein Name eingegeben werden. Wenn dies nicht der Fall ist (also keine Eingabe erfolgt, also nur Enter gedrückt wird) soll "name erforderlich" ausgegeben werden. Eben so lange bis ein name eingegeben wird.
if(string[20] == *"") { printf("\nName erforderlich:..."); scanf("%s",&string); anzFEN=anzFEN+1; } while(string[20]== *"");
Versuche mal zu begreifen, dass man solcherlei Aufgabenstellungen in C durch Einsatz von Funktionen löst, wenn es keine "passende" Standardfunktion gibt, dann schreibe dir deine eigenen.
Du kapselst also deine Probleme in eigenständige Funktionen mit definierten Schnittstellen, das erhöht die Übersichtlichkeit des Gesamtprogramms und erleichtert die Fehlersuche und Testfälle.z.B.
enum {FEHLER,ERFOLG}; char name[100]; printf("\nName erforderlich:..."); while( liesString(name)==FEHLER ) /* liesString schreibst du dir selbst */ { printf("fehlerhafte Eingabe"); printf("\nName erforderlich:..."); } ... printf("eingegebener Name: %s",name); ... int liesString(char *s) { s[0]='\0'; scanf("%99[^\n]",s); while( getchar()!='\n' ); return s[0]!='\0'?ERFOLG:FEHLER; }
-
Akzeptiere das erst einfach mal mit dem 'Enter' und der neuen Zeile.
Wenn du das in den Griff bekommen willst, wird der Quelltext nur deshalb deutlich umfangreicher. Und das nur wegen der OptikWenn dein anderer Quelltext sauber läuft, kannst du dich immer noch daran versuchen
MfG f.-th.
-
Ich hätte ja das hier vorgeschlagen, die Frage ist, ob das hilft, nach der "wir sind seit zwei Monaten bei Schleifen" Aussage.
int is_name(const char* name) { return 0; } char* get_name(char* buf, size_t size) { do printf("Enter your name: "); while (!is_name(fgets(buf, size, stdin))); return buf; } int main(void) { char buf[100]; printf("Hello, %s!", get_name(buf, sizeof(buf))); return 0; }
-
Also ich hab das mit der leeren Eingabe mal weggelassen.
int anzFE,anzAG,anzZE,anzFEN,maxZ,minZ,zeit; anzFE=0,anzAG=0;anzFEN=0,minZ=0,maxZ=0; char name[20]; char nameMin[20]; char nameMax[20]; char string[20]; char string1[20]; zeit==0; do { anzZE=anzZE+1; printf("Geben Sie Ihren Namen ein:..."); scanf("%s", name); printf("\nGeben Sie Ihre Zeit ein:..."); scanf("%d",&zeit); if(zeit==0) { printf("\nAusgeschieden"); anzAG=anzAG+1; } else { if(zeit<minZ) { minZ=zeit; nameMin==name; } else { if(zeit>maxZ) { maxZ=zeit; nameMax==name; } } } } while(zeit>=0); printf("\n%d\n%s\n%d\n%s\n%d",anzAG,nameMin,minZ,nameMax,maxZ);
Steh aber schon vor dem nächsten Problem. Alles läuft Problemlos nur am Ende gibt das Programm irgendwelche Zeichen aus.
-
Womit kompiliert das?
-
Swordfish schrieb:
Womit kompiliert das?
Das sollte sich mit jedem standardkonformen C99-Compiler übersetzen lassen. Das ändert natürlich nichts da dran, dass es semantische Fehler ohne Ende enthält.
-
SeppJ schrieb:
Swordfish schrieb:
Womit kompiliert das?
Das sollte sich mit jedem standardkonformen C99-Compiler übersetzen lassen. Das ändert natürlich nichts da dran, dass es semantische Fehler ohne Ende enthält.
Nein:
int anzFE,anzAG,anzZE,anzFEN,maxZ,minZ,zeit; anzFE=0,anzAG=0;anzFEN=0,minZ=0,maxZ=0;
(Das Semikolon am Ende der ersten Zeile.)
-
pyhax schrieb:
(Das Semikolon am Ende der ersten Zeile.)
Nein:
SeppJ hat recht.
@SeppJ: aber
anzFE=0,anzAG=0;anzFEN=0,minZ=0,maxZ=0;
tut nicht was es scheint, oder?
// edit: doch, tut es.
-
In dem Programm ist sehr vieles, was nicht tut, was es scheint. Oder eigentlich schon tut, was es scheint, weil die Fehler recht offensichtlich sind. Aber es tut vieles nicht das, was der Autor will.
Aber syntaktisch ist es an sich korrekt.
-
SeppJ schrieb:
In dem Programm ist sehr vieles, was nicht tut, was es scheint.
das war mir schon klar... Der msvc hat sich nur an og. Zeile verschluckt...
-
Swordfish schrieb:
SeppJ schrieb:
In dem Programm ist sehr vieles, was nicht tut, was es scheint.
das war mir schon klar... Der msvc hat sich nur an og. Zeile verschluckt...
Kann eben kein C99. Ist ja schließlich auch erst ein halbes Jahr offiziell. Nein, Moment, das war C11...
-
SeppJ schrieb:
Kann eben kein C99. Ist ja schließlich auch erst ein halbes Jahr offiziell. Nein, Moment, das war C11...
lol
-
Lol ein halbes Jahr offiziell. Aber wenn man die Zeit abzieht in der wir irgendwas sinnloses gemacht haben kommt man auf ca. 1 Monat.
Und das Highlight ist, dass der Professor die Programmiersprache C++ nennt.
Aber mal zurück zum Thema. Hat jemand eine Ahnung wo der Fehler liegen könnte?
-
NewC++ schrieb:
nameMin==name; ... nameMax==name;
Sieht schon beides schizophren und nach Professorengeschwätz aus.
-
Wutz schrieb:
NewC++ schrieb:
nameMin==name; ... nameMax==name;
Sieht schon beides schizophren und nach Professorengeschwätz aus.
Schien mir logisch, funktioniert aber scheinbar nicht. Liegt wahrscheinlich daran, dass wir noch immer bei den Schleifen sind.
-
Jo. Du hast jetzt zwei Möglichkeiten: Entweder, Du schreibst weiter von der Tafel ab, oder Du zeigst selbstverantwortung und besorgst Dir ein gutes(tm) Buch
Was Du willst ist
strcmp( )
.
-
Swordfish schrieb:
Jo. Du hast jetzt zwei Möglichkeiten: Entweder, Du schreibst weiter von der Tafel ab, oder Du zeigst selbstverantwortung und besorgst Dir ein gutes(tm) Buch
Was Du willst ist
strcmp( )
.Ein Buch hab ich ja schon. Aber das Problem ist, wenn ich Befehle verwende, die uns der Lehrer nicht beigebracht hat, dreht der komplett durch.
Liegt wohl daran, dass die meisten aus der Klasse jetzt schon mehr können als er.
-
Dann geh zum Klassenvorstand oder zum Direktor (oder falls ihr nen Abteilungsvorstand habt, zuerst zu diesem
)... erzähle was los ist, erkläre dass so das Lernen nichts bringt, denn von der Tafel abschreiben ist gleichbedeutend wie vom Buch abschreiben was du genau so gut zu Hause auch machen kannst.
Ihr dürft euch von den Professoren nichts gefallen lassen, gerade Programmieren ist ein Bereich wo man seiner Kreativität, seinem Einfallsreichtum freien Lauf lassen kann. Etwas wo man nicht stur nach einem Schema arbeiten "muss", denn wäre dies so, bräuchten wir keine Softwareentwickler mehr, dann würde es ein Bot auch tun (oh ja, ich hab mich an einem Bot versucht der "halbwegs" individuell ein Programm erstellt, was aber nicht so leicht ist, ein Projekt dass ich gerne in der Ecke verstauben lasse ^^)
Also Kopf hoch, bauch rein brust raus und vorwärts zum Professor und auf die Barrikaden steigen!