Hilfe, kleines C Problem!!



  • 😕 😕
    Ich brauch doch eine Schleife???oder?
    Er soll mir ja die nächst kleinere und größere durch 7 teilbare Zahl ausgeben, falls ich eine Zahl eingebe welche nicht durch 7 teilbar ist.
    Also zb. ich geb 180 ein.
    Ausgabe: Nicht durch 7 teilbar.
    Ausgabe: Nächstkleinere durch 7 teilbare Zahl 175
    Ausgabe: Nächstgrößere 182
    Das muss ich doch mit einer schleife machen?? 😕



  • Seppi schrieb:

    😕 😕
    Ich brauch doch eine Schleife???oder?
    Er soll mir ja die nächst kleinere und größere durch 7 teilbare Zahl ausgeben, falls ich eine Zahl eingebe welche nicht durch 7 teilbar ist.
    Also zb. ich geb 180 ein.
    Ausgabe: Nicht durch 7 teilbar.
    Ausgabe: Nächstkleinere durch 7 teilbare Zahl 175
    Ausgabe: Nächstgrößere 182
    Das muss ich doch mit einer schleife machen?? 😕

    nehm dir doch mal den tip von deinem namensvetter zu herzen.
    gib dir mal den rückgabewert der modulo-operation (also die zeile mit dem %-operator) aus, spiel ein paar zahlen durch und denke kurz nach.



  • Moment, hab glaub ich kapiert was du meinst.
    Ich muss nur von meiner Zahl den Rest abziehen und hab die nächstkleinere Zahl!
    😃 😕



  • So mein Prog ist jetzt soweit fertig!! 😃
    Aber braücht nocheinmal Hilfe.
    Am ende wird gefragt nochmal ja/nein.
    Hab des so gemacht s.u.
    Kapier nur nicht worüber ich die do while Schleife legen muss damit es funktioniert und von vorne anfängt.
    Mein Stand:

    #include <math.h>
    #include <windows.h>

    int main()

    do

    { int zahl,b,erg,rest,erg1,erg2,weiter;
    b=7;
    printf("Bitte geben Sie eine positive ganze Zahl ein:");
    scanf("%d",&zahl);
    erg = zahl / b;
    if
    (zahl % 7 == 0)
    printf("\nDie Zahl ist durch 7 teilbar!\n");

    else
    {
    printf("\nDie Zahl ist nicht durch 7 teilbar!\n");
    rest = zahl % 7;
    erg1 = zahl - rest;
    erg2 = erg1 + 7;
    printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1);
    printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2);
    }

    printf("\nSoll das Programm wiederholt werden? (Ja= 1, Nein= beliebig) :");
    scanf ("%d",weiter);
    if (weiter = 1)
    printf("\nProgramm wird wiederholt");
    else
    printf("\nProgramm wird beendet");

    return 0;
    }while (weiter=1);

    Bitte nochmal helfen!!



  • if (weiter = 1)
    

    du weist der Variablen den Wert 1 zu, und dann fragst du, ob weiter ungleich 1 ist ...



  • Mein Fehler!
    Hier richtig, bis auf die Schleife:
    #include <math.h>
    #include <windows.h>

    int main()

    {
    do
    { int zahl,b,erg,rest,erg1,erg2,ja;
    b=7;
    printf("Bitte geben Sie eine positive ganze Zahl ein:");
    scanf("%d",&zahl);
    erg = zahl / b;
    if
    (zahl % 7 == 0)
    printf("\nDie Zahl ist durch 7 teilbar!\n");

    else
    {
    printf("\nDie Zahl ist nicht durch 7 teilbar!\n");
    rest = zahl % 7;
    erg1 = zahl - rest;
    erg2 = erg1 + 7;
    printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1);
    printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2);
    }

    printf("\nSoll das Programm wiederholt werden? (ja= 1, nein= beliebig) :");
    scanf ("%d",&ja);

    if (ja == 1)
    printf("\nProgramm wird wiederholt");
    else
    printf("\nProgramm wird beendet");

    return 0;
    }while (ja == 1);
    return 0;}



  • Achja, nochwas. Wir haben gelernt, das != ungleich heißt. Stimmt des gar nicht?
    Heißt nur = ungleich??



  • Du verlässt das Programm (main fkt.) durch das return, bevor du das while erreichst.

    Außerdem würde ich mir das

    printf("\nProgramm wird beendet");
    

    bis zum Schluss aufheben, wenn du die Schleife verlassen hast.

    Anm.: Bitte angewöhnen, Codetags zu benutzen bei so viel Quellcode.



  • Seppi schrieb:

    Achja, nochwas. Wir haben gelernt, das != ungleich heißt. Stimmt des gar nicht?
    Heißt nur = ungleich??

    Hab mich vlt. unklar ausgedrückt.
    Wenn du

    if (weiter)
    

    schreibst, gilt die Bedingung als erfüllt, wenn weiter!=0 ist.
    Allerdings wird in deinem Beispiel zuerst 1 zugewiesen durch das = und dann erst verglichen.



  • So jetzt funktioniert alles!! 😃
    Wens interessiert:

    #include <math.h>
    #include <windows.h>
    
    int main()
    
    { int zahl,b,erg,rest,erg1,erg2,ja;
      b=7;
      do
      {
    
      printf("\nBitte geben Sie eine positive ganze Zahl ein:");
      scanf("%d",&zahl);
      erg = zahl / b;
      if
      (zahl % 7 == 0)
      printf("\nDie Zahl ist durch 7 teilbar!\n");
    
      else
      {
       printf("\nDie Zahl ist nicht durch 7 teilbar!\n");
       rest = zahl % 7;
       erg1 = zahl - rest;
       erg2 = erg1 + 7;
       printf("\nDie naechstkleiner durch 7 teilbare Zahl hat den Wert: %d\n",erg1);
       printf("\nDie naechstgroesser durch 7 teilbare Zahl hat den Wert: %d\n",erg2);
       }
    
       printf("\nSoll das Programm wiederholt werden? (ja= 1, nein= beliebig) :");
       scanf ("%d",&ja);
    
       if (ja == 1)
    	   printf("\nProgramm wird wiederholt\n");
       else
    	   printf("\nProgramm wird beendet\n");
    
         }while (ja == 1);
    return 0;}
    

    Das einzige was der Compiler jetzt noch meckert ist zu dem 1. printf und scanf
    missing prototype.
    Wie kann ich das noch beheben?



  • Na das sieht doch schon besser aus 🤡

    #include <stdio.h>
    

    mit rein, dann passt es.



  • Vielen Dank, ich schuld Dir ein Bier! 😋 👍


Anmelden zum Antworten