ggT mit scanf und printf



  • HI - bin neu hier 🙂 und schon eine frage 🙂

    und zwar..

    will ich wie schon im titel steht den ggT errechnen lassen... funktioniert auch wunderbar, nur habe ich einige probleme bei dem fehlerausschließen.

    bei der eingabe fange ich NUR buchstabeneingaben ab... auch negative INTs... allerdings läuft irgendetwas schief, wenn ich 123abc eingebe... normalerweise nimmt sich das prog doch die zahlen am anfang und nutzt die einfach weiter... allerdings springt der bei mir gleich zur nächsten eingabe und setzt mein "b" mit irgendeinem wert.. ich weis nich was falsch läuft.

    hier mein code:

    #include <stdio.h>
    #include <stdlib.h>
    int ggt(int a, int b) {
       if((a == b)||(b == 0))
          return a;
       else if(a < b)
          return ggt(a, b - a);
       else
          return ggt(a - b, b);
    }
    int main(void) {
       int a,b,k,l,zahl1 ,zahl2 ,wurzel1 ,wurzel2;
    
       printf("\nGeben Sie bitte die erste Zahl (!) ein:  ");
       while (scanf("%d",&k) != 1){
       {
    	    printf("\nIch sagte eine Zahl > 0! \n");
            printf("\nBitte geben Sie eine ZAHL ein:  ");
            clearerr(stdin);
            while (getc(stdin) != '\n' );
        }
    
       }
         a = abs(k);  
    	 printf("das is dein a: %d\n",a);
    
        printf("\nGeben Sie bitte die zweite Zahl (!) ein:  ");
        while (scanf("%d",&l) != 1){
       {
            printf("\nIch sagte eine Zahl > 0 !\n");
            printf("\nBitte geben Sie eine ZAHL ein:  ");
    		printf("\nblaahier: %d", l);
            clearerr(stdin);
            while (getc(stdin) != '\n' );
        }
    
       }
    
     b = abs(l);
    
       if (a==0){
       printf("\nDie erste Zahl darf keine '0' sein!!\n\nProgramm wird beendet!\n");
       return 0;
       }
       printf("\nDer ggT von %d und %d ist %d\n", a, b, ggt(a,b));
       return 0;
    }
    

    wär nett wenn ihr bei einer eventuellen antwort rücksicht darauf nehmen würdet, dass ich ein blutiger anfänger in sachen C bin...
    ach ja es ist wichtig, dass das programm in C ist und nicht C++ oder C#

    danke schon mal 🙂

    p.s.: alles gute zum nikolaus-tag 😃



  • Schau dir mal die Dokumentation zu scanf an.
    Speziell was den Rückgabewert betrifft.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • scanf ließt in deinem fall "123" bis zu "abc" ein
    dann bricht es ab
    der nächste scanf ließt dann weiter bei "abc" wobei a bzw b als dezimaler ASCII-wert eingelesen werden
    i rate mal und sage die zweite zahl ist entweder 97 oder 98

    ich rate daher von scanf ab
    verwende lieber:

    char hilf[20];

    gets(hilf);
    //ließt einen string ein
    k=strtol(hilf,&eptr,10);
    //übersetzt einen string in eine zahl - solange bis er
    //keinen zahlenwert mehr enthält oder leer ist
    //strtol (=string to long) findest du in <string.h>

    viel spas in C



  • ja, ich würde dir zur eingabe auch gets() empfehlen, dann mittels isdigit() (<ctypes.h>) prüfen und mit strtol umwandeln:

    bool is_valid(char* s)
    {
       do
       {
          if(!isdigit(*s));
             return false;
       }while(*(++s));
    
       return true;
    }
    

    (ungetestet)



  • jau habs jetz hinbekommen 😃 vielen dank für eure hilfe...

    wollt ihr meinen code sehen ?

    ^^


Anmelden zum Antworten