C: Taschenrechner



  • Hallo! Mein Problem besteht darin, dass ich einen Taschenrechner in c erzeugen soll, der lediglich addition und subtraktion beherscht. zuerst soll die eingabe als kompletten string eingelesen und dann berechnet werden.
    die eingabe soll etwa so aussehen:
    z.B: "13 + 15 - 7\n"
    weiterhin soll die eingabe des wortes "my" in allen groß-klein-schreibweisen möglich sein. dieses wort soll den wert 13 haben

    an sich bin ich schon zimlich weit mit den rechner und habe mir viele gedanken dazu gemacht, aber i-wo freife ich auf eine falsche stelle in meinem eingabestring zu und überspringe so das eingegebene /n das ich jedoch als abbruchvariable meiner schleifen brauche.

    FINDET JEMAND DEN FEHLER? wäre echt klasse

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (void)
    {
    enum {n_max=80}; 
    char eing[n_max];
    char kopie[21];
    int pos=0,poskop=0;
    int a=0,b;
    int erste=1,zeichen;
    
    printf("bitte geben sie eine Rechnung ein:\n"); 
    fgets(eing,80,stdin);      //string einlesen
    while (eing[pos] != '\n')       //durchlauf bis ende
      {     
      if (erste==1)   //einlesen der ersten zahl
        {
        if (((eing[pos]=='m')||(eing[pos]=='M'))&&((eing[pos+1]=='y')||(eing[pos+1]=='Y')))       
          {b=13;}                   
    //bei der eingabe my soll der wert auf 13 gesetzt werden
          else
            {
            while (eing[pos] != ' ')  //durchlauf bis ende der zahl
              {
              kopie[poskop]=eing[pos];             
    //kopieren der zahl in einen extra string
              poskop++;
              pos++;
              }
            pos++;           
    //auf stelle mit zeichen vorrücken
            b= atoi (kopie);  //umwandlung string in int
            for (poskop=0;poskop<21;poskop++ //löschen des kopie-strings
              {kopie[poskop]=' ';}
            poskop=0;
            erste=0;
            }
        a=b;
        }
        else        //weiteres vorgehen
          {
          if ((eing[pos]=='+')||(eing[pos]=='\n'))    //rechenzeichenabfrage
            {zeichen=1;}
            else
              {
              if ((eing[pos]=='-')||(eing[pos]=='\n'))
                {zeichen=0;}       
              }
    
    //abfrage des rechenzeichens
    
          pos=pos+2;
          if (((eing[pos]=='m')||(eing[pos]=='M'))&&((eing[pos+1]=='y')||(eing[pos+1]=='Y')))
            {b=13;}   //erneutes berechnen der eingegebenen zahl
            else
              {
              while (eing[pos] != ' ')                       
                {
                kopie[poskop]=eing[pos];         
                poskop++;
                pos++;
                }
              printf("JA\n");
              pos++;                                               
              b= atoi (kopie);                             
              for (poskop=0;poskop<21;poskop++)               
                {kopie[poskop]=' ';}
              poskop=0;
              }     
          if (zeichen==1)      //rechenzeichenabfrage
            {a=a+b;}
            else
              {
              if (zeichen==0)
                {a=a-b;}   
              }
          }
    
          pos=pos+2;;
    
          if (eing[pos] != '\n') {pos=pos+2;}
    
      }
    printf("Ergebnis: %d\n",a); 
    return 0;
    }
    

    ich bin per e-mail unter bigear@web.de zu erreichen. danke


  • Mod

    DNitschke schrieb:

    FINDET JEMAND DEN FEHLER? wäre echt klasse

    Den findest DU mit einem DEBUGGER bestimmt ganz leicht. Es ist nie zu früh, mit einem Debugger umzugehen zu lernen. Und auch nicht schwer, auch wenn's zunächst kompliziert klingt.



  • Evtl. ist ein pos = pos+2; verkehrt.

    In kopie[] fehlt die abschließende '\0'.
    Beim löschen von kopie[] solltest du statt ' ' lieber '\0' schreiben.

    Schmeiß den Debugger an.



  • also ich hab das jetzt mehrfach mit dem debugger probiert aber ich komm echt nicht weiter!
    ich könnt wirklich hilfe gebrauchen.

    und das pos=pos+2 am ende muss sein, damit ich das trennende leerzeichen überspringe



  • Warum programmierst du Standardbibliotheksfunktionalitäten nach?
    Warum nimmst du zum Einlesen und Interpretieren von Strings nicht die dafür passenden Funktionen?



  • weil das leider so gefordert ist
    ist ein info-1 kurs.^^



  • http://ideone.com/TIIdW
    Fehlerbehandlung habe ich für dich noch übrig gelassen.



  • ich danke dir!!!!


Anmelden zum Antworten