Zum Inhalt springen

chars und operationen


IYTI

Empfohlene Beiträge

Hallo,

ich habe früher mal ein wenig mit c++ rumgedoktort, also auch nichts besonderes aber ich kam klar und jetzt habe ich für einen Studienkameraden die Aufgabe übernommen ne EAN Nummern Entcodierung zu schreiben. Sprich mit Kontrollziffer etc (8-stellig). Die haben bisher nur chars, int usw... und LEIDER auch lediglich printf und Co :( habe früher leider nur cin/cout etc gearbeitet (iostream) die benutzen lediglich stdio

nun zu meiner eigentlichen Frage:

Das Programm steht fest in meinen Gedanken, doch tausend kleine Kinderprobleme wie man was wie schreibt behindern mich:

8stellige Zahlenfolge in char abspeichern

dann die zahl durch 10000000 (8) teilen und mir die ganze zahl ausgeben lassen ohne Komma:

Bspl.:

1234567/10000000=1,234567=1

234567/1000000=2,34567=2

34567/100000=3,4567=3

usw....

das dann auch mit den anderen positionen jeweils machen

dann die einzelnen Ziffern mit der 3-1-3... codierung mal nehmen, addieren und dann mit der Kontrollziffer überprüfen.

Kann mir das zufällig einer andeutungsweise in den printf kram übersetzen? komme da vor allem mit den formaten "%s" nach dem printf etc durcheinander, teilweise kommen tierisch abgedrehte zeichen und zahlen raus, weil ich durch die ganze Variablen deklarationen schieße und alles von int nach double und umgekehrt umgerechnet wird *grml*. außerdem müsste ich wissen, wie ich eine Zahl die als char abgespeichert habe, durch eine Zahl teilen kann. Zahl[10]/10 geht nämlich nicht wie ich rausgefunden hab. :uli Wie gesagt hab C++ bzw C auch schon seit 3 Jahren nicht mehr angeschaut, mache Maschinenbau und hab nichts mehr damit zu tun :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst einen char Array nicht einfach so durch eine Zahl teilen. Wenn du da was teilen willst dann benutze auch die entsprechenden Datentypen wie double. Ansonsten musst du dir eine Bibliothek suchen die mit Strings rechnen kann, aber da seh ich jetzt bei der Aufgabe nicht so den Sinn drin.

Wie printf funktioniert kannst du eigentlich jeder x-beliebigen C Dokumentation entnehmen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

8stellige Zahlenfolge in char abspeichern

dann die zahl durch 10000000 (8) teilen und mir die ganze zahl ausgeben lassen ohne Komma:

Wenn die Zahl sowieso schon in einem char-Array vorliegt, hast du doch schon jede Ziffer einzeln, und brauchst nicht mehr zu dividieren. Du kommst an den Zahlenwert der Ziffer, indem du '0' davon abziehst.
Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, aber wenn ich mir mit printf("%s", Variable[4]) z.B. die 4te Ziffer ausgeben möchte, dann schreibt er mir AB der 4ten Ziffer alles hin, d.h. Wenn ich das Wort "Haus" als char abspeichern will und dann den zweiten buchstaben anzeigen lassen möchte, dann schreibt er den rest hinterher und da steht: "aus" oder "us" wäre ja schön, wenn ich nur eine ziffer angezeigt bekommen würde :( dann hätte ich ja kein problem und würde die direkt die zahlen multiplizieren mit 3-1-3..

Link zu diesem Kommentar
Auf anderen Seiten teilen

genau weil es fängt ja bei [0] an. Ok, ich versuche es mal so. Bekomme meistens kleine Gesichter oder Herzchen als Ausgabe :D also nicht gerade das richtige. Dazu kommt, dass ich jetzt immernoch nicht weiter bin, was ich mit dem char mache, wie soll ich den denn jetzt weiterverarbeiten, denn

mein source code:

#include <cstdlib>

#include <iostream>

#include <stdio.h>

int main()

{

char Zahl[10];

int dschangojo;

scanf("%c", &Zahl[10]);

dschangojo = Zahl[1] * 2;

printf ("%c", dschangojo);

system("PAUSE");

return EXIT_SUCCESS;

}

schätze mal, dass das ergebnis durcheinaderkommt, denn ich speicher ja einmal in einem char, dann in einer Integer!? bin mir aber nicht sicher und weiß auch nicht wirklich wie ich es anders machen könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

scanf("%c", &Zahl[10]);
Hier liest du ein einzelnes Zeichen ein, und zwar an eine Speicherposition, die dir nicht gehört. Zahl ist ein Array mit 10 Elementen, der gültige Index geht also von 0 bis 9. Wenn du eine Zeichenkette einlesen willst, benutze %s und die Adresse des ersten Elements.

dschangojo = Zahl[1] * 2;

Der "Zahlenwert" eines char entspricht dem ASCII-Code des Zeichens. Wenn du also den Ziffernwert haben willst, musst du einfach den ASCII-Code von '0' abziehen. Das habe ich weiter oben bereits gesagt.

printf ("%c", dschangojo);
Wenn du den Zahlenwert in dem int dezimal ausgeben willst, musst du %d benutzen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

ne klappt immernoch nicht, sry komme mit den ganzenverschiedenen umrechnungsfaktoren die durch %s chars und int resultieren total durcheinander.

#include <cstdlib>

#include <iostream>

#include <stdio.h>

int main()

{

char Zahl[10];

int ascii, ausgabe;

scanf("%s", &Zahl[10]);

ascii = Zahl[0] * 2;

ausgabe = ascii-0;

printf ("%d", ausgabe);

system("PAUSE");

return EXIT_SUCCESS;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

ne klappt immernoch nicht, sry komme mit den ganzenverschiedenen umrechnungsfaktoren die durch %s chars und int resultieren total durcheinander.
Vielleicht solltest du mal ein Anfängertutorial oder -buch durcharbeiten. Durch Rumprobieren kommst du nicht weit.

scanf("%s", &Zahl[10]);
Immer noch derselbe Fehler: 10 ist ein ungültiger Index.

ascii = Zahl[0] * 2;
Warum multiplizierst du den ASCII-Code mit 2?

ausgabe = ascii-0;
0 ist etwas anderes als '0'.
Link zu diesem Kommentar
Auf anderen Seiten teilen

ich multipliziere mit 2 um herauszufinden ob ich ein richtiges ergebnis bekomme. eingabe 4 ausgabe 8.

hätte es mit strings abgespeichert, dann hätte ich jede Zahl einzelnt und müsste nicht tausend variablen umrechnen. Aber das haben die ja noch nicht :(

Egal, habe etwas anderes zu tun und das nimmt mir gerade ein bischen zuviel zeit in anspruch, deshalb lasse ich es sein. Er soll das dann alleine machen. Trotzdem, danke an alle die mir weiterhelfen wollten ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du musst wissen, das z.B. das zeichen 'a' den dezimalen Wert 97 hat.

Das Zeichen '0' (die ziffer null) hat den wert 48. somit wäre '0' + '0' = 96 bzw. '`'

wenn du jetzt die ziffer (char) '1' in die zahl 1 (int) umwandeln möchtest, dann kannst du das z.b. mit

'1' - '0' = 1

'9' - '0' = 9

'3' - '0' = 3

"übersetzt" würde das heissen:

49 - 48 = 1

57 - 48 = 9

51 - 48 = 3

hier findest du die tabelle:

http://www.torsten-horn.de/techdocs/ascii.htm

kannst dir auch gern eine eigene funktion zum "umwandeln" schreiben.

z.B.

char2int(char zeichen)

{

return zeichen - '0'; // d.h. zeichen - 48

}

int2char(int zahl)

{

return zahl + '0'; // d.h. zahl + 48

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...