[C/C++] C: If (Buchstabe) {blah}

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von DasBoeseLebt, 27. Januar 2010 .

Schlagworte:
  1. 27. Januar 2010
    C: If (Buchstabe) {blah}

    Hallo,

    ich stehe vor dem Problem, dass ich einen C Programm schreiben soll und wollte es so schreiben, dass er, wenn man einen Buchstaben eingibt was machst.

    auf eine switch-case oder if(buchstabe == 'A') etc. kein Interesse, da es den Code nur aufblähen würde.

    Leider bin ich nicht so der C Spezi und hab nur fabs, fabsf, isalpha und isdigit gefunden, aber da sagt der compiler 'nö'.

    Die Ursprungsvariable ist vom Typ float und sollte es bleiben.
     
  2. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Code aufblähen? Das musst du erklären...

    Bei welchem Buchstaben soll das Programm was machen?
     
  3. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Einen Buchstaben in einem float zu speichern ist keine gute Idee. Buchstaben sind zwar nichts anderes als Zahlen, allerdings sind es Ganzzahlen, keine Gleitkommazahlen.

    Wenn du testen willst, ob ein char in einem bestimmten Bereich liegt, dann z.B. so:
    Code:
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    
     char c;
     c = getchar();
    
     if (c >= 'a' && c <= 'z') {
     puts("Kleinbuchstabe");
     } else if (c >= 'A' && c <= 'Z') {
     puts("Großbuchstabe");
     } else if (c >= '0' && c <= '9') { 
     puts("Ziffer");
     } else {
     puts("Weder Zahl, noch Klein/Großbuchstabe");
     }
    
    }
     
  4. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Ne, ich möchte den Buchstaben abfangen, weil bei Buchstaben das Programm abschmiert.

    Zwar ist das nicht teil der Aufgabenstellung - aber sicher ist sicher.

    Man könnte auch sagen, er soll überprüfen, ob es sich um eine Zahl handelt.

    Wenn ich sage:

    f_Wert sei jetzt mal a


    if(0<f_Wert || f_Wert>9999)
    {
    blahbha
    }

    Bei einer Eingabe wie a schmiert er ab, weil das in einer Do-while verschaltet ist, hab ich dann ne tolle Endlosschleife.
     
  5. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Ohne Code/Fehlermeldung können wir überhaupt nichts machen. Ich vermute mal, das liegt am float. Könnte aber auch alles andere sein. Und "Compiler sagt nö" is keine Fehlerbeschreibung.
     
  6. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Code:
    do 
     {
     printf("\nGeben Sie die %i Temperatur ein: ",i_Anzahl);
     scanf("%f",&f_Wert_2); 
    
     if(-253<f_Wert_2 || f_Wert_2<9999)
     {
     if (f_Wert_2<f_Min)
     {
     f_Min = f_Wert_2;
     }
    
     if (f_Wert_2>f_Max)
     {
     f_Max = f_Wert_2;
     }
    
     f_Gesamt+= f_Wert_2;
     f_Durchschnitt+= f_Wert_2;
    
     printf("\nMaximalwert : %fl",f_Max);
     printf("\nMinimalwert : %fl",f_Min);
    
     printf("\nGesamtwert : %fl",f_Gesamt);
     printf("\nDurchschnitt: %fl",f_Durchschnitt/i_Anzahl);
    
    
     i_Anzahl+=1;
     }
    
     else
     {
     i_Ende = 1;
     }
    
    
     } while (i_Ende != 1);
    Buchstaben als Eingabe abfangen. Ist nur die Do-Schleife als Ausschnitt. Hoffe ihr versteht jetzt mein Problem.
    Das Programm(bzw. die Schleife) soll dann aufhören, wenn eine Zahl ausserhalb des gültigen Bereiches oder ein Buchstabe eingeben wird.

    Hatte mir gedacht, dass man in der if-Bedingung so in etwa machen kann

    Code:
     
    kein wirklicher code, aber so meine is das.
    if (f_Wert_2 = Zahl)
    {
    }
    Häufig gibt es ja so Funktionen die es Überprüfen und dir dann eine 0 oder 1 zurück geben.
    Oder bin ich total falsch aufm Damper. ?(
     
  7. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    wieso machst du denn keine if/else anweisung mit hexa zahlen als buchstaben?
    die zahlen liegen ja auch in einem bestimmten bereich von hexa zahlen
     
  8. 27. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Erst als char[] einlesen, checken ob's ein Buchstabe ist und erst wenn es keiner ist nach float umwandeln (z.B. mit atof()).

    mfg r90
     
  9. 28. Januar 2010
    AW: C: If (Buchstabe) {blah}

    du kannst auch die rückgabewerte von scanf() nutzen. scanf liefert nämlich 0 zurück, wenn kein wert erfolgreich eingelesen werden kann.
    scanf - C++ Reference
     
  10. 28. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Ich hab mittlerweile soviel ausprobiert, gestern .. heute keine Lust mehr gehabt.

    Code steht unten... an manchen Stellen nicht mehr richtig, vollständig. Ich bekomm es nicht hin.
    Wenn mal wer das checken könnte.

    Er rechnet falsch, nimmt nur jede 2te Zahl als mögliche Eingabe... umgewandelte Char ist 0.0000000000000
    => Rechnung falsch.

    Aber bei Buchstaben blockt er.^^


    ggf. muss man was umschreiben, für atof ..oder kommentare wieder nehmen bzw rausnehmen.
    Spoiler
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <locale>
    #include <conio.h>
    
    
    void main()
    {
     float f_Wert_1,f_Durchschnitt,f_Gesamt,f_Max,f_Min;
     int i_Anzahl = 1,i_Ende = 0;
     char f_Wert_2 = 0;
    
     printf("Solange die Temperatur im gueltigen Bereich liegt\n");
     printf("koennen weitere Temperaturen eingegeben werden\n");
     printf("Ungueltiger Bereich => Abbruch!(-253 bis 9999");
     
     do{
     printf("\nGeben Sie die %i Temperatur ein: ",i_Anzahl);
     scanf_s("%f",&f_Wert_1);
     } while (f_Wert_1<-253 || f_Wert_1>99999);
    
     f_Min = f_Wert_1;
     f_Max = f_Wert_1;
     f_Gesamt = f_Wert_1;
     f_Durchschnitt = f_Wert_1;
    
     printf("\nMaximalwert: %fl",f_Max);
     printf("\nMinimalwert: %fl",f_Min);
     printf("\nGesamtwert : %fl",f_Gesamt);
     printf("\nDurchschnitt : %fl",f_Durchschnitt);
    
     i_Anzahl+= 1;
    
     do 
     {
     printf("\nGeben Sie die %i Temperatur ein: ",i_Anzahl);
     //scanf("%c",&f_Wert_2); 
     f_Wert_2= getch();
    
     
     if(isalpha(f_Wert_2) == 0)
     {
     //f_Wert_1=(float)atof(f_Wert_2);
     printf("%f",f_Wert_2);
     f_Wert_2= static_cast<float>(f_Wert_2);
    
     printf("%f",f_Wert_2);
    
    
     if(-235>f_Wert_2 || f_Wert_2<9999)
     {
     if (f_Wert_2<f_Min)
     {
     f_Min = f_Wert_2;
     }
    
     if (f_Wert_2>f_Max)
     {
     f_Max = f_Wert_2;
     }
    
     f_Gesamt+= f_Wert_2;
     f_Durchschnitt+= f_Wert_2;
    
     printf("\nMaximalwert : %fl",f_Max);
     printf("\nMinimalwert : %fl",f_Min);
    
     printf("\nGesamtwert : %fl",f_Gesamt);
     printf("\nDurchschnitt: %fl",f_Durchschnitt/i_Anzahl);
    
    
     i_Anzahl+=1;
     }
    
     else
     {
     i_Ende = 1;
     }
     }
    
     else
     {
     i_Ende = 1;
     }
    
     } while (i_Ende != 1);
    }
     
  11. 28. Januar 2010
    AW: C: If (Buchstabe) {blah}

    Warum haste das nicht so gemacht, wie razor90 das gesagt hat?
    Ein char-Array anlegen und da den Wert drinn speichern.

    Ich hab den Code jetzt mal angepasst, änderungen sind makiert:

    Spoiler
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <locale>
    #include <conio.h>
    
    [B]bool onlynumber(const char* _str)
    {
     int i=0;
     while(_str[i])
     {
     if(_str[i] < '0' || _str[i] > '9')
     return false;
     ++i;
     }
    
     return true;
    }[/B]
    
    
    int main()
    {
     float f_Wert_1,f_Durchschnitt,f_Gesamt,f_Max,f_Min;
     int i_Anzahl = 1,i_Ende = 0;
     [B]char f_Wert_2[20] = { 0 };[/B]
    
     printf("Solange die Temperatur im gueltigen Bereich liegt\n");
     printf("koennen weitere Temperaturen eingegeben werden\n");
     printf("Ungueltiger Bereich => Abbruch!(-253 bis 9999");
    
     [B]//do{ [/B]
     printf("\nGeben Sie die %i Temperatur ein: ",i_Anzahl);
     scanf("%f",&f_Wert_1);
     [B]//} while (f_Wert_1<-253 || f_Wert_1>99999);[/B]
    
     f_Min = f_Wert_1;
     f_Max = f_Wert_1;
     f_Gesamt = f_Wert_1;
     f_Durchschnitt = f_Wert_1;
    
     printf("\nMaximalwert: %fl",f_Max);
     printf("\nMinimalwert: %fl",f_Min);
     printf("\nGesamtwert : %fl",f_Gesamt);
     printf("\nDurchschnitt : %fl",f_Durchschnitt);
    
     i_Anzahl+= 1;
    
     do
     {
     printf("\nGeben Sie die %i Temperatur ein: ",i_Anzahl);
     [B]scanf("%s",f_Wert_2);[/B]
     //f_Wert_2= getch();
    
    
     [B]if(onlynumber(f_Wert_2) == true)[/B]
     {
     [B]f_Wert_1=(float)atof(f_Wert_2);
     /*
     printf("%f",f_Wert_2);
     f_Wert_2= static_cast<float>(f_Wert_2);
    
     printf("%f",f_Wert_2);
     */[/B]
    
     [B]//f_Wert_2 durch f_Wert_1 ersetzt[/B]
     if(-235>f_Wert_1 || f_Wert_1<9999)
     {
     if (f_Wert_1<f_Min)
     {
     f_Min = f_Wert_1;
     }
    
     if (f_Wert_1>f_Max)
     {
     f_Max = f_Wert_1;
     }
    
     f_Gesamt+= f_Wert_1;
     f_Durchschnitt+= f_Wert_1;
    
     printf("\nMaximalwert : %fl",f_Max);
     printf("\nMinimalwert : %fl",f_Min);
    
     printf("\nGesamtwert : %fl",f_Gesamt);
     printf("\nDurchschnitt: %fl",f_Durchschnitt/i_Anzahl);
    
    
     i_Anzahl+=1;
     }
    
     else
     {
     i_Ende = 1;
     }
     }
    
     else
     {
     i_Ende = 1;
     }
    
     } while (i_Ende != 1);
    }

    ..sollte so weit klar sein.
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.