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)


Anmelden zum Antworten