schon wieder probleme: getchar()

Tutorials.at
Verfügbare Informationen zu "schon wieder probleme: getchar()"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: detewe89 - DrPhil_Guth - Dirty Oerty
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 4
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: schon wieder probleme: getchar()
  • Letzte Antwort: vor 15 Jahren, 10 Monaten, 24 Tagen, 21 Stunden, 10 Minuten
  • Alle Beiträge und Antworten zu "schon wieder probleme: getchar()"

    Re: schon wieder probleme: getchar()

    detewe89 - 03.05.2007, 20:52

    schon wieder probleme: getchar()
    und da hab ich schon wieder ein kleines problem :-) :

    in meinem Lehrbuch steht folgende Aufgabe:

    "...Der Algorithmus liest die Ziffern einer positiven ganzen Zahl als Zeichen und berechnet den entsprechenden Zahlenwert. Taucht ein Zeichen auf, das keine gültige Ziffer ist, soll eine Fehlermeldung ausgegeben und für die Berechnung der Zahl ignoriert werden..."
    (K. Zeiner, "Programmieren lernen mit C")


    Ich hab als Anfänger folgende Umsetzung versucht:

    Code: /*070430getchar.c*/

    #include <stdio.h>
    int main(void)

    {
         int  c, z;

          printf("Programm liest einzelne positive Ziffern und addiert diese\n");
          printf("Eingabe der 1. Zahl: ");
          z = 0;
          while (c != '\n')
          {
              c = getchar();
              getchar();
              if ((c >= '0') && (c <= '9'))
              {
                  z += c;
                  printf("Ergebnis bei c=%d: %d\n", c, z);
              }
              else
              {
                  printf("Fehler!\n");
              }
              printf("Eingabe: ");
          }
          return 0;
    }

    /*
      Das Programm läuft syntaktisch einwandfrei,
      Probleme treten jedoch noch bei der Umwandlung der Variable c auf!
    */


    BITTE HELFT MIR :o :o :o



    Re: schon wieder probleme: getchar()

    DrPhil_Guth - 04.05.2007, 11:23


    natürlich tritt da ein fehler auf.
    Du musst unter scheiden zwischen dem Wert einer Zahl und ihrem Zeichen (Symbol).

    Dazu musst du verstehen, wie zeichen kodiert sind: Sie sind sozusagen eine Zahl in einer Tabelle. Dort kannst du nachschauen, welchen wert welches zeichen hat: http://www.cppreference.com/ascii.html

    Zum beispiel:
    int x;
    x = 5;
    Dann enthält die zahl den Wert.

    Allerdings: Wenn du 5 eintippst, dann kommt das zeichen als char- wert an. Der ist dann nicht 5 sondern 0x35 (dezimal: 53).
    Wenn du dann die beiden Zahlen als Richtige integer ausgeben willst, dann steht natürlich nicht 5 sondern 53.

    Wie man das Problem löst:
    es gibt mehrere möglichkeiten: entweder du schreibst deinen eigenen algorithmus, der dir die zahlen auf der tabelle nachschaut (oder einfach 48 abzieht) oder du benutzt eine der vorgefertigten funktionen, die strings in zahlenwerte umwandeln. (atoi() (stdlib.h), sscanf() (stdio.h), usw.)

    Ich würde das so angehen:

    Zeichen vom benutzer einlesen, wenn das zeichen '\n' ist, abbrechen, das hast du schon gemacht.
    In der schleife abfragen, ob ein Wert eine Ziffer darstellt ( isdigit(), deklariert in ctype.h ). wenn nein, dann zeichen ignorieren, wenn ja, dann zeichen in einen string schreiben.
    Am ende dann z.B. mit x = atoi(string_adresse); den String in eine Zahl umwandeln.

    p.s.: while (c != '\n')
    Achtung: es ist ziemlich gefährlich einen integerwert in einer Schleife mit einem char wert zu vergleichen. Je nachdem ob bei dem compiler char als signed oder unsigned angesehen wird kann es zu fehlern bei der konvertierung kommen. am besten ist, du castest c nochmal manuell zu char:
    Code: while ( (char) c != '\n')



    Re: schon wieder probleme: getchar()

    detewe89 - 04.05.2007, 15:18


    Ok, soweit hab ich alles verstanden, danke für die Tipps.

    Ich frag mich nur, was der Buchautor sich bei der Aufgabe gedacht hat, denn die Umwandlungsfunktionen zwischen den Typen sollten dem Leser eigentlich noch unbekannt sein, auch der ASCII-Code. Man soll nur mit stdio.h arbeiten, und auch dort kein sscanf oder Ähnliches benutzen, nur stupide die einfachsten Begriffe wie Schleifen, Kontrollanweisungen und eben die Funktion getchar() sollte angewendet werden.

    Frag ich mich, wie das ohne diese Zusatzinfos zu schaffen sein soll...



    Re: schon wieder probleme: getchar()

    Dirty Oerty - 04.05.2007, 22:34


    der autor will wohl zu selbstständigen lernen anfechten :D



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    programm beendet sich sofort - gepostet von absoluter noob tith am Samstag 22.07.2006
    ???? - gepostet von drubba7 am Freitag 18.05.2007
    Wie...? - gepostet von Schubl am Samstag 13.05.2006
    Welche kostenlose Firewall ist die sicherste? - gepostet von Danny am Freitag 13.04.2007
    Kleine Probleme mit C - gepostet von smogpaster am Sonntag 18.03.2007
    Suche geeignete programmiersprache - gepostet von vpascal am Mittwoch 08.08.2007
    Visual c++ 2005 express edition - gepostet von honora am Sonntag 11.03.2007
    @Walgo - gepostet von Xin am Samstag 21.07.2007



    Ähnliche Beiträge wie "schon wieder probleme: getchar()"

    Mal wieder ein problem beim einloggen.... - mobbers (Donnerstag 12.07.2007)
    Mal wieder die Sägen betanken? - Zort85 (Donnerstag 12.07.2007)
    ich bin wieder da - Ahlem (Freitag 03.08.2007)
    Wieder da bin - Luna (Donnerstag 23.08.2007)
    Bin jetzt auch wieder da! - Anluriel (Donnerstag 12.07.2007)
    Schon fast ein Shop, wer mag sollte mal vorbeischauen. - sido (Donnerstag 12.07.2007)
    Bin wieder zurück - darkness (Donnerstag 06.09.2007)
    ein traum,den ich schon vergessen hatte... - DieAngel (Sonntag 09.01.2005)
    Armes Umanandalein - Maxvorstadt (Dienstag 12.10.2010)
    Kabelbaum GPZ - catman (Dienstag 18.03.2008)