IYTI Geschrieben 11. Oktober 2006 Geschrieben 11. Oktober 2006 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 Zitieren
Guybrush Threepwood Geschrieben 11. Oktober 2006 Geschrieben 11. Oktober 2006 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. Zitieren
Klotzkopp Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 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. Zitieren
IYTI Geschrieben 12. Oktober 2006 Autor Geschrieben 12. Oktober 2006 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.. Zitieren
Timon Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 Liegt vermutlich daran, dass %s einen String ausgibt. Ein String ist immer bis zum Null-Terminator gueltig. In deinem Fall sollte %c passender sein. Variable[4] sollte eigentlich die 5. Ziffer sein. Zitieren
IYTI Geschrieben 12. Oktober 2006 Autor Geschrieben 12. Oktober 2006 genau weil es fängt ja bei [0] an. Ok, ich versuche es mal so. Bekomme meistens kleine Gesichter oder Herzchen als Ausgabe 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. Zitieren
Klotzkopp Geschrieben 13. Oktober 2006 Geschrieben 13. Oktober 2006 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. Zitieren
IYTI Geschrieben 13. Oktober 2006 Autor Geschrieben 13. Oktober 2006 ok danke, damit sollte es klappen Zitieren
IYTI Geschrieben 13. Oktober 2006 Autor Geschrieben 13. Oktober 2006 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; } Zitieren
Klotzkopp Geschrieben 13. Oktober 2006 Geschrieben 13. Oktober 2006 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'. Zitieren
IYTI Geschrieben 13. Oktober 2006 Autor Geschrieben 13. Oktober 2006 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 Zitieren
Klotzkopp Geschrieben 13. Oktober 2006 Geschrieben 13. Oktober 2006 ich multipliziere mit 2 um herauszufinden ob ich ein richtiges ergebnis bekomme. eingabe 4 ausgabe 8.Du hast aber '4', nicht 4. Es ist sinnlos, den ASCII-Code mit zwei zu multiplizieren. '4' * 2 ist nicht '8', sondern '`'. Zitieren
Hakawamu Geschrieben 16. Oktober 2006 Geschrieben 16. Oktober 2006 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 } Zitieren
Empfohlene Beiträge
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.