while-Schleife mit einem Character (j,n) steuern
-
Hallo,
ich versuche mittels einer Ja/Nein Abfrage die while-Schleife erneut zu durchlaufen, bzw. diese zu beenden. Wie man am Code sieht, habe ich schon alles mögliche versucht - und es leider nicht geschafft.
Problem (1/999)
Nach der ersten Abfrage, die auch korrekt funktioniert, wird nach Eingabe von einem j die while-Schleife wie gewünscht erneut durchlaufen. Jedoch wird nun die Abfrage nach dem Namen ignoriert und gleich im Anschluß daran die Telefonnummer angefragt.Kann mir da bitte jemand weiterhelfen?
#include<stdio.h> char name[30]; FILE *datei; void anlegen(void){ datei = fopen("TELEFON","w"); if(!datei){ printf("Datei konnte nicht angelegt werden!"); }else{ fclose(datei); } } void eintragen(void){ char name[31]; int c=106, telefonnummer; //int telefonnummer; datei = fopen("TELEFON","a"); if(!datei){ printf("Datei konnte nicht geoeffnet werden."); }else{ //while(*c == 'j'){ while(c == 106){ // 106 = 'j' printf("Vor- und Nachnamen eingeben: "); gets(name); //fgets(name,31,stdin); //size_t p=strlen(name); /* '\n' mit '\0' überschreiben */ //name[p-1]='\0'; printf("Telefonnummer eingeben: "); scanf("%30i",&telefonnummer); fprintf(datei,"%s\t%i",name, telefonnummer); printf("Weiteren Datensatz erfassen? Nein=0, Ja= beliebige Taste\n\n"); //c = getchar(); //printf("Ausgabe von c: %i\n\n",c); //scanf("%s",c); // Wenn ein Zahlenwert geprüft werden soll... //gets(c); scanf("%i",&c); printf("%i",c); } } } int main(void){ anlegen(); eintragen(); getchar(); return 0; }
-
- fclose vergessen
- statt des laienhaftes gets besser scanf("%29[^\n]"...)
- Feldlänge für int bei scanf ist ziemlich sinnlos
- do-while ist hier besser als while
- "while(c == 106){ // 106 = 'j'" -> warum nicht while(c == 'j'), so wie du es selbst kommentiert hast und somit sollte c vom Typ char sein und erfordert dann "%c"
- nach jedem scanf: stdin leeren, und zwar komplett z.B. mitwhile(!ferror(stdin)&&!feof(stdin)&&getchar()!='\n');
das spart dann auch dein hässliches getchar() in main
-
... und: Eine Telephonnummer ist kein Integer!!!
... und: Warum globale Variablen? Benutze Parameter und Rückgabewerte!