char String in ein größere int Zahl umwandeln,zum weiterrechnen,(z.B. aus char "2" "5" "3"
-
[html][cpp]Hallo zusammen,
Als erstes: Natürlich bin ich, wie üblich,ein Neuling (sag ich jetzt einfach mal so,bitte nicht ernst nehmen!!!).
Ich habe ein Tastaturproblem und zwar:
Ich würde gerne ein Programm schreiben,das folgende Punkte erledigen kann:1. Tastatureingabe im Datentyp char mit anschließender Konvertierung in einen
Int-Wert das mehrer Stellen berücksichtigt (z.B. aus "2-5-3" einen int-Wert
"253" zusammenstellt,damit ich mit dem Wert "253" als ganz normalen int-Wert
weiter arbeiten kann.2. Hintergrund soll sein: Mit Buchstaben in verschiedene Funktionen
wechseln zu können,und mit Zahlen weiterrechnen können.Also zum Verständnis: ich will jederzeit mit "Buchstaben" irgendwo hin
wechseln können und gleichzeitig Zahlen eingeben können mit denen ich,wie
int-Werte,weiterarbeiten kann.Übrigens der Zahlenbereich 0-2000 ist
vollkommen ausreichend.P.S.
Wenn möglich mit getchar() o. getch(),da ich erstmal das ganze mit printf() auslesen möchte.Nur zur Anmerkung:
Ich weiss das von getch() u. getchar() die Gegenfunktion putch() u. putchar() ist!
Funktioniert aber trotztdem immer,soweit ich informiert bin.
:p Wenn nicht immer her mit der Kritik. :pDie Standardfunktion scanf o. sscanf darfs auch sein.Es wäre mir aber lieber mit den obengenannten,da ich gelesen habe das "scanf & co" nicht so gut wären bzw. das die einige Überraschungen parat haben sollen.
Hier mal mein Quelltext:
#include <stdio.h>
#include <stdlib.h>main()
{
char ascii;
int i;
int key,coup=0,ende=0,chance=0;
int zahl[37],anz[200],pos[1000],last[1000];for(i=0;i<37;i++) zahl[i] = 0;
for(i=0;i<200;i++) anz[i] = 0;
for(i=0;i<1000;i++) pos[i] = last[i] = 0;printf("\nq = ende\nc = chance\nb = chance ende\n");
while( (ende == 1) != 1 )
{
ascii = getchar();key = atoi(&ascii);
printf("\nZahl: ");
if(ascii == 'q') ende = 1; /*Programm beenden*/
if(ascii == 'b') chance = 0; /*Chance beenden*/
if(ascii == 'c'|| chance == 1) /*Chance*/
{
chance = 1;
printf("\nChancen");
}if(chance == 0)
{
++coup;
printf("\n%d ",key);}
}
return 0;
}Also!Dieses Programm läuft soweit wie gewünscht,bloss ich kann keine Auswertung machen bezüglich alles was ab int-Wert 10-2000 liegt.
Kann mir jemand diesen Trick anhand dieses Beispiels erklären??
!!! Bin über jede noch so kleine Info glücklich,da ich noch einiges zu lernen habe.!!!
Hoffentlich habe ich jetzt nix vergessen
MfG Ego
P.S. Habe mal unten "4 Leerzeichen" + sonstiges ausprobiert,funktioniert anscheinend nicht,kann mir jemand sagen wie man hier "Leerzeichen,Tabs" und ähnliches reinbekommt??
-
Ego schrieb:
char ascii; int key,coup=0,ende=0,chance=0; ascii = getchar();key = atoi(&ascii);
Das geht voll in die Hose, da atoi als Parameter einen nullterminierten String erwartet. Also ein Array von char. NICHT den Zeiger auf EIN einzelnes Zeichen.
Zum einlesen von Zahlen kannst du
scanf()
nehmen oder du liest erst eine Zeile mitfgets()
ein und wandelst dann mitstrtol()
in die Zahl um.Ego schrieb:
P.S. Habe mal unten "4 Leerzeichen" + sonstiges ausprobiert,funktioniert anscheinend nicht,kann mir jemand sagen wie man hier "Leerzeichen,Tabs" und ähnliches reinbekommt??
Falls du den C-Code formatiern möchtest dann musst du den Text markieren und dann den C/C++ Button unter den
anklicken.
-
hi,
du willst nen char in die zugehörige dezimalzahl umwandeln?
das geht z.b. über den ascii code, guckst du:char a = '1', b = '9'; printf ( "%d\n", a - '0' ); printf ( "%d\n", b - '0' );
-
Wenn möglich mit getchar() o. getch(),da ich erstmal das ganze mit printf() auslesen möchte.
Mit printf liest man nichts aus.
Ich weiss das von getch() u. getchar() die Gegenfunktion putch() u. putchar() ist!
Toll.
Es gibt kein putch, zumindest nicht verbreitet.Funktioniert aber trotztdem immer,soweit ich informiert bin.
Dass die Verwendung von Nicht-Standardfunktionen "immer" funktioniert, ist mir neu. Wer erzählt solchen Unsinn?
Die Standardfunktion scanf o. sscanf darfs auch sein.
Super Erkenntnis.
Es wäre mir aber lieber mit den obengenannten,da ich gelesen habe das "scanf & co" nicht so gut wären bzw. das die einige Überraschungen parat haben sollen.
Achwas.
Wer erzählt solchen Unsinn? (Ich habe da so eine Ahnung.)
Merke dir mal:
1. der Compiler hat immer recht.
2. der Compiler hat immer recht.
3. der Compiler hat immer recht.
4. die Verwendung der Standardbibliothek ist immer besser als alles andere.
5. die Verwendung der Standardbibliothek ist immer besser als alles andere.
6. die Verwendung der Standardbibliothek ist immer besser als alles andere.
7. wenn Fehler auftreten, hast immer du Schuld und beginne bei 1.P.S.
Der Compiler gibt auch Warnungen aus. Diese sind zwar nicht standardisiert, aber lesenswert weil 1.
-
1. Ein char ist schon ein int im Bereich 0 bis 255 entsprechend ASCII, nur die Ziffern 0 bis 9 liegen fortlaufend ab 48.
2. Ein char String ist ein Array einzelner Characters.
3. Für weiteres gibt es in C geeignete Standardfunktionen.
4. Für den verbleibenden Rest beginnt man mit den Grundlagen für die Punkte 1 bis 3 und übt seine Programmiertechniken.Es macht wenig Sinn, angebotenen Code zu analysieren und bessere Lösungen aufzuzeigen, wenn beim Fragesteller das Verständnis noch fehlt!
Ich meine, da muss zunächst jeder selbst durch und nimmt sich ein schlaues Buch.
Die dann noch offenen Fragen beantworten wir gerne!
-
Wutz schrieb:
(Ich habe da so eine Ahnung.)
Welche denn?
-
int main(void){ int zahl=0; char ch_zahl; char str_zahl[10]; int mult=1; int i; printf("Bitte eine Ziffer eingeben"); scanf("%c", &ch_zahl); printf("\nChar als Int ausgegeben: %d", ch_zahl); ch_zahl-=48; // '0' != 0 --> 0 == 48 in ASCII printf("\nChar richtig zu Int umgewandelt: %d", ch_zahl); printf("\n\nBitte eine Zahl eingeben: "); scanf("%s", str_zahl); for(i=0; str_zahl[i]!='\0'; i++); for(i-=1; i>=0; i--, mult*=10) // i-=1 --> vorherige Schleife setzte i auf den Index von '\0' zahl+=(str_zahl[i]-48)*mult; // mult für stelle printf("\nString in Zahl umgewandelt: %d", zahl); return 0; }
Soweit ich die damalige Schulübung in Erinnerung hab sollte es so funktionieren,
falls du, um es zu begreiffen, keine Standard-funktionen verwenden möchtest.[Edit]: kleiner Fehler eingeschlichen ^^ sollte jetzt gehen
-
Warum schreibst du 48, wenn du doch selber schreibst, dass du '0' meinst?
-
Tag zusammen, wollte mich mal nach langer Zeit mal melden.
Hab's mal ausprobiert und hat funktioniert (Habe die letzterer Variante gewählt).Ihr habt mir sehr weitergeholfen.
Vielen Dank für die Tipps
MfG Ego