Programm Buchstaben + negative Zahlen abfangen



  • [code="cpp"]
    Hallo,
    liebe Programmierer, ich bin neu hier und wünsche euch allen zunächst einmal ein schönes frohes Jahr !
    Ich sollte ein Programm schreiben, das folgende Programme aufrufen soll, mir gelingt es aber nicht bei der Teilbarkeitsaufgabe die Buchstaben abzufangen für die Buchstaben bekomme ich jedesmal eine Zahl heraus würde mich freuen wenn mir jmmd helfen kann hier ist mein Programm 😕 😕

    #include <stdio.h>
    #include <math.h>
    #define TRUE 1
    #define FALSE -1
    #define QUERSUMME 1
    #define PYTHAGORAS 2
    #define TEILBAR 3
    #define SONSTWAS 4
    #define ENDE 0

    //Funktions typen//
    unsigned int wertLesen();
    int quersumme(int zahl);
    void pythagoras(int zahl);
    int teilbar(int zahler, int nenner);
    void menuAuswahl(void);
    void menuSteuerung(void);
    void clear(void);

    int main()
    {
    menuSteuerung();
    return 0;
    }

    //Der Eingabepuffer wird geleert//

    void clear(void)
    {
    fflush(stdin);
    }

    //lesen des Wertes muss grosser als Null sein//
    //Ausgabe : positive Zahl//

    unsigned int wertLesen()
    {
    int zahl;
    int pruefeEingabe=FALSE;

    do
    {
    printf("\nBitte eine positive Zahl eingeben: ");
    pruefeEingabe = scanf("%d", &zahl);
    clear();

    if(pruefeEingabe == TRUE)
    {
    if(zahl <= 0)
    {
    printf("Sie haben eine negative Zahl eingegeben! Bitte geben Sie erneut eine Zahl die positiv ist ein!.\n");
    }
    }
    else
    {
    printf("Fehlerhafte Eingabe! Bitte probieren Sie nochmal.\n ");
    }

    }while(zahl <= 0);

    return zahl;
    }

    // Quersumme einer Zahl//
    //Parameterr Zahl : muss grosser als Null sein!//
    //@return Quersumme der eingegebenen Zahl//

    int quersumme(int zahl)
    {
    zahl = wertLesen();
    int quersumme = 0;
    int eingabe = zahl;

    while(zahl > 0)
    {
    quersumme = quersumme + (zahl % 10);
    zahl = zahl / 10;
    }

    return printf("Die Quersumme aus %d ist %d\n", eingabe, quersumme);
    }

    // Pythagoras Rechnung//
    //@Parameter Zahl : muss grosser als Null sein! //

    void pythagoras(int zahl)
    {
    zahl = wertLesen();
    int langeX = 0;
    int langeY = 0;
    int hypotenuse = 0;

    if(zahl < 5)
    {
    printf("\n n muss >= 5!\n");
    }else{

    while (hypotenuse <= zahl)
    {
    langeY = 1;

    while (langeY <= zahl)
    {
    langeX = 1;

    while (langeX <= zahl)
    {
    if ( pow(langeX,2) + pow(langeY,2) == pow(hypotenuse, 2) && langeX < langeY )
    {
    printf("\na = %3d,b = %3d, c = %3d", langeX, langeY, hypotenuse );
    }//ende if Anweisung
    langeX++;
    }//ende 3.while Schleife
    langeY++;
    }//ende 2.while Schleife
    hypotenuse++;
    }//ende 1.while Schleife
    }//ende else

    printf("\n\n");
    }

    //Teilbarkeitsfunktion//
    //@parameter zahler//
    //@parameter nenner muss != 0 sein!//
    //@return 1 falls true(teilbar) sonst 0//

    int teilbar(int zahler, int nenner)
    {

    zahler = wertLesen();
    nenner = wertLesen();

    if( zahler % nenner == 0)
    {
    printf("\n%d ist durch %d dividierbar.\n", zahler, nenner);
    return 1;
    }
    else
    {
    printf("\n%d ist durch %d nicht dividierbar.\n", zahler, nenner);
    return 0;
    }

    return 0;

    }

    void menuAuswahl(void)
    {
    int zahl = 0;
    int menueEingabe = 0;
    int zahler = 0;
    int nenner = 0;
    do{
    printf("\nBitte wahlen sie einer der folgenden Optionen:\n");
    printf("1 - Berechnung der Quersumme\n");
    printf("2 - Berechnung Pythagoras\n");
    printf("3 - Zahl n durch t teilbar\n");
    printf("4 - Sonst was\n");
    printf("0 - Ende\n");
    printf("Ihre Wahl: ");
    scanf("%d", &menueEingabe);
    clear();
    switch(menueEingabe){
    case QUERSUMME:
    quersumme(zahl);
    break;
    case PYTHAGORAS:
    pythagoras(zahl);
    break;
    case TEILBAR:
    teilbar(zahler, nenner);
    break;
    case SONSTWAS:
    printf("\nWunsche Ihnen ein gesundes Jahr!:)\n");
    break;
    case ENDE:
    printf("\nDas Programm wird heruntergefahren\n");
    break;
    default:
    printf("\nIhre Eingabe ist nicht in Ordnung! Bitte geben sie eine ganze Zahl zwischen 0 und 4 ein.\n");
    break;
    }
    }
    while(menueEingabe != ENDE);
    }

    // menuSteuerung : Funktionen aus den Aufgaben 1 bis 5 einbauen//

    void menuSteuerung(void)
    {
    menuAuswahl();
    }



  • #include <stdio.h>
    #include <math.h>
    #define TRUE 1
    #define FALSE -1
    #define QUERSUMME 1
    #define PYTHAGORAS 2
    #define TEILBAR 3
    #define SONSTWAS 4
    #define ENDE 0
    
    //Funktions typen//
    unsigned int wertLesen();
    int quersumme(int zahl);
    void pythagoras(int zahl);
    int teilbar(int zahler, int nenner);
    void menuAuswahl(void);
    void menuSteuerung(void);
    void clear(void);
    
    int main()
    {
    menuSteuerung();
    return 0;
    }
    
    //Der Eingabepuffer wird geleert//
    
    void clear(void)
    {
    fflush(stdin);
    }
    
    //lesen des Wertes muss grosser als Null sein//
    //Ausgabe : positive Zahl//
    
    unsigned int wertLesen()
    {
    int zahl;
    int pruefeEingabe=FALSE;
    
    do
    {
    printf("\nBitte eine positive Zahl eingeben: ");
    pruefeEingabe = scanf("%d", &zahl);
    clear();
    
    if(pruefeEingabe == TRUE)
    {
    if(zahl <= 0)
    {
    printf("Sie haben eine negative Zahl eingegeben! Bitte geben Sie erneut eine Zahl die positiv ist ein!.\n");
    }
    }
    else
    {
    printf("Fehlerhafte Eingabe! Bitte probieren Sie nochmal.\n ");
    }
    
    }while(zahl <= 0);
    
    return zahl;
    }
    
    // Quersumme einer Zahl//
    //Parameterr Zahl : muss grosser als Null sein!//
    //@return Quersumme der eingegebenen Zahl//
    
    int quersumme(int zahl)
    {
    zahl = wertLesen();
    int quersumme = 0;
    int eingabe = zahl;
    
    while(zahl > 0)
    {
    quersumme = quersumme + (zahl % 10);
    zahl = zahl / 10;
    }
    
    return printf("Die Quersumme aus %d ist %d\n", eingabe, quersumme);
    }
    
    // Pythagoras Rechnung//
    //@Parameter Zahl : muss grosser als Null sein! //
    
    void pythagoras(int zahl)
    {
    zahl = wertLesen();
    int langeX = 0;
    int langeY = 0;
    int hypotenuse = 0;
    
    if(zahl < 5)
    {
    printf("\n n muss >= 5!\n");
    }else{
    
    while (hypotenuse <= zahl)
    {
    langeY = 1;
    
    while (langeY <= zahl)
    {
    langeX = 1;
    
    while (langeX <= zahl)
    {
    if ( pow(langeX,2) + pow(langeY,2) == pow(hypotenuse, 2) && langeX < langeY )
    {
    printf("\na = %3d,b = %3d, c = %3d", langeX, langeY, hypotenuse );
    }//ende if Anweisung
    langeX++;
    }//ende 3.while Schleife
    langeY++;
    }//ende 2.while Schleife
    hypotenuse++;
    }//ende 1.while Schleife
    }//ende else
    
    printf("\n\n");
    }
    
    //Teilbarkeitsfunktion//
    //@parameter zahler//
    //@parameter nenner muss != 0 sein!//
    //@return 1 falls true(teilbar) sonst 0//
    
    int teilbar(int zahler, int nenner)
    {
    
    zahler = wertLesen();
    nenner = wertLesen();
    
    if( zahler % nenner == 0)
    {
    printf("\n%d ist durch %d dividierbar.\n", zahler, nenner);
    return 1;
    }
    else
    {
    printf("\n%d ist durch %d nicht dividierbar.\n", zahler, nenner);
    return 0;
    }
    
    return 0;
    
    }
    
    void menuAuswahl(void)
    {
    int zahl = 0;
    int menueEingabe = 0;
    int zahler = 0;
    int nenner = 0;
    do{
    printf("\nBitte wahlen sie einer der folgenden Optionen:\n");
    printf("1 - Berechnung der Quersumme\n");
    printf("2 - Berechnung Pythagoras\n");
    printf("3 - Zahl n durch t teilbar\n");
    printf("4 - Sonst was\n");
    printf("0 - Ende\n");
    printf("Ihre Wahl: ");
    scanf("%d", &menueEingabe);
    clear();
    switch(menueEingabe){
    case QUERSUMME:
    quersumme(zahl);
    break;
    case PYTHAGORAS:
    pythagoras(zahl);
    break;
    case TEILBAR:
    teilbar(zahler, nenner);
    break;
    case SONSTWAS:
    printf("\nWunsche Ihnen ein gesundes Jahr!:)\n");
    break;
    case ENDE:
    printf("\nDas Programm wird heruntergefahren\n");
    break;
    default:
    printf("\nIhre Eingabe ist nicht in Ordnung! Bitte geben sie eine ganze Zahl zwischen 0 und 4 ein.\n");
    break;
    }
    }
    while(menueEingabe != ENDE);
    }
    
    // menuSteuerung : Funktionen aus den Aufgaben 1 bis 5 einbauen//
    
    void menuSteuerung(void)
    {
    menuAuswahl();
    }
    

    Google mal nach "Code - Einrückung"



  • Du wurdest gewolft.



  • Poste bitte nur das wesentliche und das besser lesbar mit Einrückungen!

    Zur Frage: Du musst statt einer Zahl (int) einen String einlesen. In diesem String prüfst du die ASCII-Werte:

    45 = Minuszeichen
    48..57 = Ziffern 0 ... 9



  • Ok! Danke ich achte in Zukunft darauf !
    Ich versuch es mal, bin noch ein Anfänger^^

    was bedeutet eig. gewolft? 😮



  • akinquaresma schrieb:

    was bedeutet eig. gewolft? 😮

    Du lernst aus einem Buch (oder Lehrer), das vollkommen ahnungslos ist und so wird das nie was. Programmieren wird für Dich immer eine ärgerliche Angelegenheit bleiben und Erfolge werden sich nicht zeigen.



  • hart aber war, das Buch das wir von der Dozentin bekommen haben bringt nichts und sobald wir auch fragen stellen heißt es immer guckt wie ihr klar kommt & das Programmieren fällt mir auch ziemlich schwer !



  • Sieht doch gut aus im Großen und Ganzen.

    Aber...

    fflush(stdin);
    

    ist schon mal nix.
    Die Sprache C ist klar spezifiziert und man kann fflush() nur mit output streams aufrufen.

    Wenn Du Zeichen aus dem Puffer von stdin entfernen willst, dann mach das z.B. mit einem scanf()

    void clear(){
      scanf("%*[^\n]"); // liest alles bis zum nächsten \n und verwirft's
    }
    

    .

    Das clear() nach jeder Eingabe ist auch unnötig.

    Weiterhin: Beim einlesen gibt Dir scanf() an, wieviele Werte es denn nun erfolgreich eingelesen hat.
    Bei wertlesen() muss das also genau 1 sein. Damit prüfst Du, ob Du erfolgreich gelesen hast.
    Das ist ein wiederkehrendes Pattern in C. (Benutz es doch auch gleich für Deine eingabe in main(void)!)

    unsigned int wertLesen()
    {
      int zahl = 0; // vorbesetzen, sonst zufaellig!
    
      do
        {
          printf("\nBitte eine positive Zahl eingeben: ");
          if(scanf("%d", &zahl)==1)
    	{
    	  if(zahl <= 0)
    	    {
    	      printf("Sie haben eine negative Zahl eingegeben! Bitte geben Sie erneut eine Zahl die positiv ist ein!.\n");
    	    }
    	}
          else
    	{
    	  clear();
    	  printf("Fehlerhafte Eingabe! Bitte probieren Sie nochmal.\n ");
    	}
    
        }while(zahl <= 0);
    
      return zahl;
    }
    

    Zugegeben bei Eingaben wie "7z" o.ä. ist der Ansatz zu simpel.
    Wenn's zu simpel ist, orientier Dich an berniebutts Vorschlag.

    IMHO solltest Du auf die Schnittstelle allerdings nicht zu viel Zeit verschwenden: ist eher undankbarer Kram mit standard C Mitteln.



  • Du wurdest gewolft.

    lmao 😃



  • Furble Wurble, Danke dir vielmals für deine Antwort und Bemühungen ! 🙂 👍



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten