iphpbb - Forenarchiv: Archivbeitrag des Forums Tutorials.at
Verfügbare Informationen zu "Zeichen einzeln einlesen"

  • Qualität des Beitrags:
  • 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 1 Jahr, 9 Tagen, 21 Stunden, 20 Minuten
Alle Beiträge und Antworten
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.
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
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.
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];
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.
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
bubblelol - 27.09.2007, 01:01

hm... ist atoi(); nicht in stdlib.h definiert?
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 diesem Forum
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
Zeichen dafür das man alt wird - lookout (Samstag 04.03.2006)
Im Zeichen der Jungfrau - juliane (Samstag 07.04.2007)
komische Zeichen - samos65 (Sonntag 06.08.2006)
Logo/Zeichen - 9er (Sonntag 07.08.2005)
Das Zeichen des schwachen Imams - Safuan (Mittwoch 15.02.2006)