Zeichen einzeln einlesen

Tutorials.at
Verfügbare Informationen zu "Zeichen einzeln einlesen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: bubblelol - Dirty Oerty - wirthi - exbs - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 8
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Zeichen einzeln einlesen
  • Letzte Antwort: vor 16 Jahren, 6 Monaten, 22 Tagen, 1 Stunde, 9 Minuten
  • Alle Beiträge und Antworten zu "Zeichen einzeln einlesen"

    Re: Zeichen einzeln einlesen

    bubblelol - 20.09.2007, 19:55

    Zeichen einzeln einlesen
    Hallo.
    Ich habe ein Problem.
    Unzwar möchte ich eine Zahl mit 4 stellen einlesen (z.b. 1234) dann aber mit jeder Zahl einzeln arbeiten können.
    Beispiel: Ich lese die Zahl 1234 von der Tastatur ein und schreibe dann im Quellcode das die erste Stelle mit der letzten addiert wird, also bei dem beispiel wäre das dann 1+4=5.
    Wie soll ich das machen?
    Durch die Sachen auf Tutorials.at hab ich nichts gefunden.



    Re: Zeichen einzeln einlesen

    Dirty Oerty - 20.09.2007, 21:27


    Zuerstmal würde ich '1234'(also die Eingabe) in ein char-Array einlesen lassen.
    Und ab da ist es eigentlich wirklich leicht:

    Code: int ergebnis = ((int)eingelesen[0] - 48) + ((int) eingelesen[3] - 48);

    (Nicht getestet)

    Verstanden? :)

    MfG
    Daniel



    Re: Zeichen einzeln einlesen

    bubblelol - 20.09.2007, 22:08


    Also wenn ich dich richtig versteh meinst du das so:
    Code: #include <stdio.h>

    int main()
    {
        char a[4];
        int e;
        scanf("%c", &a);
        e = (a[0] - 48) + (a[3] - 48);
        printf("%d", e);
        while(1); // damit das Programm nicht sofort schließt
    }


    So oder so ähnlich hab ich es auch schon probiert, das Problem ist jeddoch das die Zahl z.b. 1234 so wie sie ist in a[0] eingelesen wird (so scheints mir zumindest).
    Als Ergebnis kommt dann -47 raus wegen den (a[3] - 48 ) weil a[3] = 0 ist und 1 - 48 dan -47 ist.



    Re: Zeichen einzeln einlesen

    wirthi - 20.09.2007, 22:50


    Mit "%c" liest du auch ein *einzelnes* Zeichen ein (also a[0]), keinen String (Zeichenkette) - das geht mit %s.

    Darüber hinaus muss dein Array um zumindest eins größer sein als der einzulesende String, da der String null-Terminiert ist (d.h. ein Zeichen mit dem Wert 0 angehängt wird). Also char a[5];



    Re: Zeichen einzeln einlesen

    exbs - 21.09.2007, 08:31


    Lese die Zahl als Integer ein. Dann musst du nur die Anzahl Stellen herausfinden und dann die Zahl durch 10 teilen und die den Rest immer in einer Variable speichern.

    Gucke dir dazu einfach mal an, wie so ein Zahlensystem (in dem Fall das Dezimalsystem) aufgebaut ist.

    Die Stellen und die einzelnen Zahlen rausholen, kann auch in einem rekursiven Schritt geschehen.



    Re: Zeichen einzeln einlesen

    DrPhil_Guth - 21.09.2007, 17:30


    exbs lösung ist ganz gut, ein kleiner tipp dazu wäre der Modulo Operator "%" der den Rest einer division zurückgibt.

    Wenn du die Möglichkeit mit der Zeichenkette wählst, dann nimm doch bitte statt (a[0] - 48) eine sichere variante wie zum beispiel atoi(a[0]). Diese ist in stdio.h definiert



    Re: Zeichen einzeln einlesen

    bubblelol - 27.09.2007, 01:01


    hm... ist atoi(); nicht in stdlib.h definiert?



    Re: Zeichen einzeln einlesen

    bubblelol - 27.09.2007, 01:32


    Ich hab es jetzt so gemacht:

    Code: #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
        int temp[4];
        char string[4];
        setvbuf(stdin, NULL, _IONBF, 0);             // Puffer löschen
        setvbuf(stdin, NULL, _IOFBF,BUFSIZ);        //
        printf("Geben Sie einen Binaercode ein: ");
        fgets(string, 30, stdin);

        for(int i = 0; i <= (strlen(string) - 2); i++)      // Überprüfen ob nur
                if(string[i] != '0' && string[i] != '1')   // 1 und 0
                    printf("Fehler");

        for(int i = 0; i < strlen(string); i++)    // zu int machen
        {
            temp[i] = string[i];
            if (temp[i] == 48)
                temp[i] = 0;
            else if (temp[i] == 49)
                temp[i] = 1;
        }
        printf("%d %d %d %d", temp[0], temp[1], temp[2], temp[3]);

        while(1);
        return 0;
    }


    Wenn es einen einfacheren Weg gibt könntet ihr den mir dan bitte posten?



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



    Weitere Beiträge aus dem Forum Tutorials.at

    Error - gepostet von xxx am Freitag 01.12.2006
    c/c++? - gepostet von pYp am Montag 04.09.2006
    Micrsoft Visual C++ Kompilieren - gepostet von Cookie am Freitag 03.11.2006
    ASCII-Code ! - gepostet von EndSub am Donnerstag 10.08.2006
    Demo Version machen ----> Wie? - gepostet von vpascal am Freitag 04.05.2007
    Allokieren in PASCAL ? - gepostet von exbs am Montag 19.02.2007
    Ich Verstehe nicht was das ganze Variable ist - gepostet von Fro0zen am Sonntag 17.09.2006



    Ähnliche Beiträge wie "Zeichen einzeln einlesen"

    Zeichen dafür das man alt wird - lookout (Samstag 04.03.2006)
    Im Zeichen der Jungfrau - juliane (Samstag 07.04.2007)
    [S]Kristall [B]Deut - Anonymous (Freitag 04.06.2010)
    Logo/Zeichen - 9er (Sonntag 07.08.2005)
    Sylvies Routinen - Sylvie (Montag 18.02.2013)
    Kommentare zu: Im Zeichen des Phönix - Merith (Dienstag 08.05.2007)
    AWB + AWBT Cleaveland Wheel and Brakes - Parker - WNF (Samstag 02.07.2011)
    die dazugehörigen zeichen - Gaara2 (Mittwoch 07.11.2007)
    WWE Zeichen - sido42 (Sonntag 03.06.2007)
    3alamat Assa3a(Die Zeichen der Endzeit) erkennen! - SeyfBinduYazan (Freitag 18.08.2006)