Hilfe bei C-Programm
-
Hab da mal was zusammen gestellt (sorry, eigentlich sollte es nur ein kleiner Tipp werden, am Ende war's dann aber doch ein ganzes Prog. ;)):
#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> int ber(int zahl){ int quer=0; while(zahl!=0){ quer=quer+zahl%10; zahl=zahl/10; } return quer; } int main(void){ char zahl[10]; int izahl, fehler, negativ; while(1){ do{ int i; izahl=0; fehler=0; negativ=0; printf("Geben sie eine Zahl ein: "); scanf("%s", zahl); if(!strncmp(zahl, "q", 2)) return 0; for(i=0; i<strlen(zahl) && !fehler; ++i) if(!isdigit(zahl[i]) && zahl[0]!='-') fehler=1; if(!fehler) izahl=atoi(zahl); }while((izahl>-10 && izahl<10) || fehler); printf("Quersumme von %d ist: %d\n\n", izahl, ber(izahl)); } }
[ Dieser Beitrag wurde am 03.07.2003 um 22:22 Uhr von RTC editiert. ]
-
Vielen Dank
Hab selber schon ein Programm zusammengebracht, aber meins ist bei weitem nicht so gut.
Danke!!!!
-
@RTC
Hab mehrere Fragen zu deinem Prog.
Warum schreibst du das "int i;" in die Schleife ?
Müsste beim strncmp nicht "q\n" stehen, wenn du schon 2 Zeichen vergleichst ?
Und müsste in der do-while-Schleife nicht genau das umgekehrte, also
z.B. !fehler getestet werden.@Hakkinen
Was für eine Prüfung is'n das, für die du das Programm schreiben solltest.
-
Original erstellt von tiaz:
**@RTC
Hab mehrere Fragen zu deinem Prog.
Warum schreibst du das "int i;" in die Schleife ?
**Warum nicht? Es wird nur in der Schleife benötigt. Gut, man hätte es auch in main() deklarieren können, is Wurscht
Original erstellt von tiaz:
Müsste beim strncmp nicht "q\n" stehen, wenn du schon 2 Zeichen vergleichst ?Wieso? Er soll nur abbrechen, wenn NUR q eingegeben wird. Wenn ein Zeichen dahinter steht, dann nicht. Deswegen die 2 Bytes. Und wieso \n? Das wird nicht abgespeichert in dem String. Wird nur q eingegeben, so ist der String q\0, wobei letzteres als Ende des Strings ja automatisch an ihn angehängt wird, sodass man darauf nicht mit strncmp() prüfen muss...
Original erstellt von tiaz:
**Und müsste in der do-while-Schleife nicht genau das umgekehrte, also
z.B. !fehler getestet werden.
**Nein: do{...}while(... || fehler); heißt: führe das Eingeben (und Konvertieren) einer Zahl solange durch, wie ein Fehler aufgetreten ist (oder die Zahl >-10 bzw. <10 ist)