von Char in Int umwandeln



  • hallo, wie ihr seht ist dies mein erster Post, aber ich denke mal nicht mein Letzter.

    zuerst wollte ich anmerken, dass ich die FAQ gelesen habe und die ersten Seiten des Forums, aber keine Lösung auf meine Frage bekommen konnte.

    ich habe folgendes Problem:

    Ich möchte zwei Zahlen, die ich als chars einlesen musst, wieder in int's umwandeln damit ich diese addieren kann.
    Leider addiert er in meinem Beispiel den ASCII-Code.
    Also mein Ziel ist, dass wenn ich die Zahlen 1 und 2 über Tastatur eingebe (diese müssen durch getchar() eingelesen werden), zuerst in ints umwandle damit ich wie im Beispiel addieren kann. also es sollte dann t = 12 (natürlich als integer) herauskommen.

    hier das kleine programm, das hoffentlich mein problem veranschaulicht.

    #include <stdio.h>
    
    	int main ()
    	{
    		int t1, t2, t;
    		t1 = getchar();
    		t2 = getchar();
    		printf(" %i und %i !", t1, t2);
    
    	t1=(int)t1;
    	t2=(int)t2;
    	t = (t1*10) + t2;
    		printf(" (%i * 10) + %i = %i  %c", t1, t2, t, t);
                          /* "(49*10) + 50 = 540  c" */
    
    		return 0;
    	}
    

    habe ja zuerst gedacht, dass es durch typkonvertierung automatisch geht, weil ich die 10 als integer hatte und somit gehofft habe die chars werden zu integer, aber da habe ich irgendwas misverstanden.

    habe c erst 2 wochen also bitte nicht zu hart zu mir ! hehe.
    so, hoffe ihr versteht was ich meine, aber ich musste die frage stellen, bevor ich schlafen gehe( darum 2:30), sonst hätte ich nicht einschlafen können.

    mfg
    psyhro



  • Schreibt z.B. t1=(int)(t1-'0'); wobei t1 natürlich nur eine Stelle haben kann.

    Grüße,
    Harri



  • wieso mit getchar()? wieso nicht mit fgets, strtol/strtof, atoi, scanf, ...?

    mit getchar() bekommst du auch mehrstellige zahlen hin. erfordert selbstverstaendlich mehr arbeit als mit den verfuegbaren methoden.



  • Ja genau, scanf() ist hier doch viel besssere Wahl.

    #include <stdio.h> 
    
    int main () 
    { 
         int t1, t2, t; 
         scanf("%d",&t1); 
         scanf("%d",&t2); 
    
         printf(" %i und %i !", t1, t2); 
         t = (t1*10) + t2; 
         printf(" (%i * 10) + %i = %i  %d\n", t1, t2, t, t); 
                           /* "(49*10) + 50 = 540  c" */ 
    
         return 0; 
    }
    


  • erstmal danke für die Antworten.

    leider bin ich hier an einer Aufgabe, die ausdrücklich vorschreibt, dass ich getchar() benutzen soll ( vielleicht, damit wir uns mit den ASCII code auseinandersetzen sollen).
    mit scanf hätte ich es auch lieber gemacht.

    natürlich wird durch getchar nur ein zeichen eingelesen und es kann somit nur eine Zahl sein und keine Mehrstellige Zahl.
    Deshalb brauche ich irgendein Prozess, der mir die char wieder in eine int umwandelt, damit ich rechnen kann.
    damit ich aus den beiden chars (nur zahlen) eine ganze Zahl bekomme, deswegen auch die formel (t1*10)+t2, also es sollte dann so ablaufen:

    t1 und t2 soll int werden, damit...
    wenn t1=1 und t2=2 (im ascii code natürlich 49 und 50)
    das Ergebnis 12 (ganzzahlige Zahl) ist ( (1*10)+2=12 !)

    hoffe doch es ist machbar.
    leider bin ich noch nicht draufgekommen. (leider hat der Lehrer nichts erwähnt)

    psyhro



  • int zahl = 0, c;
    while ((c = getchar()) && (c >= '0') && (c <= '9'))
        zahl = zahl*10 + c - '0';
    

    funzt fuer positive ganzzahlen.

    edit:

    char f1 = '1', f2 = '2';
    int res = 10*(f1-'0') + (f2-'0'); // sollte 12 sein
    


  • sauber !!!, vielen dank.

    denke mal es hat geklappt, jetzt nur noch ins richtige Programm reincoden.
    ist echt verwirrend mit den ganzen ints und chars, weil wenn ich
    printf(" Die Zahl %i und %i bilden die Zahl %i",t1, t2, t); schreibe, gibt er
    folgendes aus: " Die Zahl 50 und 49 bilden die Zahl 12"
    aber denke mal das t jetzt int ist weil ich sie ja nicht als char hatte.
    OMG! hehe

    aber vielen dank

    mfg
    psyhro



  • chars und ints sind zahlen, das macht die sache so schoen verwirrend 🙂

    int foo = 60+5; printf("das muss ein A sein: %c", foo);
    

Anmelden zum Antworten