Problem beim Abfangen von Fehleingaben



  • #include <conio.h>
    #include <stdio.h>
    
    void main()
    {
         //---Variablen deklarieren--------------------------------------------------------------------
         float f32Imax, f32Umax, f32Laenge, f32LeitungsWiderstand, f32Leitungsquerschnitt;
         const conSpezLeitwertCU = 56;
         const float conMaxSpannungsabfall = 0.03;
         //--------------------------------------------------------------------------------------------
    
         //---Eingabe der benötigten Werte-------------------------------------------------------------
         printf("\Programm zur Errechnung des benoetigten Leitungsquerschnittes");
         printf("\n=============================================================");
    
         printf("\n\n       <Volt> Netzspannungspannung: ");
         scanf("%f", &f32Umax);
    
         printf("     <Ampere> maximaler Stromfluss: ");
         scanf("%f", &f32Imax);
    
         printf("      <Meter>          Kabellaenge: ");
         scanf("%f", &f32Laenge);
         //--------------------------------------------------------------------------------------------
    
         //---Querschnittbestimmung--------------------------------------------------------------------
         if ((f32Imax > 0) && (f32Umax > 0) &&  (f32Laenge>0))
          {
    
           //---Berechnungen---------------------------------------------------------------------------
           f32LeitungsWiderstand = (conMaxSpannungsabfall * f32Umax) / f32Imax;
           f32Leitungsquerschnitt = (2 * f32Laenge) / (conSpezLeitwertCU * f32LeitungsWiderstand);
           //------------------------------------------------------------------------------------------
    
           if (f32Leitungsquerschnitt <= 1.5)
            {
             f32Leitungsquerschnitt = 1.5;
            }
           else
            {
             if ((f32Leitungsquerschnitt > 1.5) && (f32Leitungsquerschnitt < 2.5))
              {
               f32Leitungsquerschnitt = 2.5;
             }
             else
              {
               if ((f32Leitungsquerschnitt > 2.5) && (f32Leitungsquerschnitt < 4.0))
                {
                f32Leitungsquerschnitt = 4.0;
                }
               else
                {
                 if ((f32Leitungsquerschnitt > 4.0) && (f32Leitungsquerschnitt < 6.0))
                  {
                  f32Leitungsquerschnitt = 6.0;
                  }
                 else
                  {
                   if ((f32Leitungsquerschnitt > 6.0) && (f32Leitungsquerschnitt < 10.0))
                    {
                    f32Leitungsquerschnitt = 10.0;
                    }
                   else
                    {
                     if ((f32Leitungsquerschnitt > 10.0) && (f32Leitungsquerschnitt < 16.0))
                      {
                      f32Leitungsquerschnitt = 16.0;
                      }
                     else
                      {
                       if ((f32Leitungsquerschnitt > 16.0) && (f32Leitungsquerschnitt < 25.0))
                        {
                        f32Leitungsquerschnitt = 25.0;
                        }
                       else
                        {
                        f32Leitungsquerschnitt = 35.0;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
    
         else
          {
           printf("\n   ____________________________________________");
           printf("\n\n                               Falsche Eingabe!");
           printf("\n                               ================");
          }
         //--------------------------------------------------------------------------------------------
    
         //---Ausgabe des berechneten Querschnittest---------------------------------------------------
         if (f32Leitungsquerschnitt > 0)//---Wurde überhaupt gerechnet?
          {
          if (f32Leitungsquerschnitt < 10)//---Wenn Ergebnis > 10 andere Ausgabeformatierung
           {
            printf("\n   ____________________________________________");
            printf("\n\n   benoetigter Leitunsgquerschnitt: %0.1f mm * mm", f32Leitungsquerschnitt);
            printf("\n                                    ===========");
           }
           else
            {
            printf("\n   _____________________________________________");
            printf("\n\   benoetigter Leitunsgquerschnitt: %0.1f mm * mm", f32Leitungsquerschnitt);
            printf("\n                                    ============");
            }
          }
         //--------------------------------------------------------------------------------------------
    
         //---Ende-------------------------------------------------------------------------------------
         printf("\n\n\n\n   [Taste zum Beenden druecken]");
         printf("\n   ----------------------------");
         getch();
         //--------------------------------------------------------------------------------------------
    }
    

    Wenn ich jetzt oben einen Buchstaben eingebe berrechnet er irgendeinen Müll.
    Wie kann ich eine Abfrage einbauen das ich nur gültige Zahlen eingeben kann?



  • lies eine Zeichenkette ein, prüfe ob in dieser auch nur Ziffern
    vorkommen und wandel diese anschließend mit atof wieder in float um.

    Viele Grüße
    Fischi



  • hehe, leitungsquerschnitt (da kommen erinnerungen auf)

    zu deinem problem:
    du solltest die warnungen des compilers nicht ignorieren:

    ...
    int main()
    ...
    float f32Imax, f32Umax, f32Laenge, f32LeitungsWiderstand, f32Leitungsquerschnitt=0.0;
    ...
    const int conSpezLeitwertCU = 56; 
    ...
    printf("\nProgramm zur Errechnung des benoetigten Leitungsquerschnittes"); 
    ...
    printf("\n   benoetigter Leitunsgquerschnitt: %0.1f mm * mm", f32Leitungsquerschnitt); 
    ...
    return 0;
    

Anmelden zum Antworten