Tabelle: Startzahl eingeben und Quadratzahl ausgeben.



  • Hallo,

    weil hier so freundlich und zügig geholfen wird versuche ich es gleich noch ein Mal :).
    Ich möchte ein C Programm schreiben, dass mir eine Tabelle ausgibt. Ich möchte eine Startzahl eingeben. Diese wird auf die linke Seite geschrieben. Diese Zahl quadriert daneben.
    In der nächsten Zeile soll dies automatisch fortgeführt werden (i++), also die Startzahl++. (Das soll so lange gehen, bis eine 0 eingegeben wird.)

    Mein Code:

    #include <stdio.h>
    
    int main(void) {
        int c, d;
        c = getchar();
    
        while (c != 0)
        {
            d = c^2;
        	printf("\n %d \t %d", c, d);
            c = c++;
            sleep(1);
        }
        return 0;
    }
    

    Die Ausgabe:

    1

    49 51
    50 48
    51 49
    52 54
    53 55
    54 52
    55 53
    56 58
    57 59
    58 56
    59 57

    Ich verstehe nicht wie Code und Ausgabe zusammen hängen.

    Ein anderer Startwert:

    213

    50 48
    51 49
    52 54
    53 55
    54 52
    55 53
    56 58
    57 59
    58 56
    59 57

    Ich habe den Eindruck, dass getchar() nicht den Zahlenwert speihert, sondern den ASCII-Code?!

    Gruß
    Tim



  • Ja richtig, er liest Zeichen ein und wenn du es in eine int Variable speicherst, bekommst du den ASCII Code. Guck dir mal atoi() an



  • Hallo insane,

    Danke! "atoi: Konvertierung Zeichenkette -> integer"

    #include <stdlib.h>
    

    habe ich eingefügt. Aber ein Problem gibt es noch. Ich habe die Variable c nun anders definiert:

    c = atoi(getchar())
    

    c soll die zeichenkettte, gewandelt in Ganzzahlen, sein. Was bei der Eingabe von Nicht-zahlen passieren würde, ist mir erstmal egal. Die Ausgabe lautet dann:

    432
    Segmentation fault

    Ganz allgemein: Wo schaue ich nach Funktionweisen und Beschreibungen von mir unbekannten Funktionen (wie atoi()) am besten im Internet nach?



  • Katzenstreu schrieb:

    Ganz allgemein: Wo schaue ich nach Funktionweisen und Beschreibungen von mir unbekannten Funktionen (wie atoi()) am besten im Internet nach?

    http://www.cplusplus.com/reference/clibrary/



  • Danke monstermunchkin! Dort habe ich nochmal atoi() nachgelesen.
    Aber mein Programm läuft nun nicht mehr (wegen Sleep(1);).
    Aber auch ohne die Pause-Funktion funktioniert es nicht richtig:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        int c;
        c = atoi( getchar() );
    
        while (c != 0)
        {
        	printf("\n %d \t %d", c, c*c);
            c = c++;
            SLEEP(1);
        }
        return 0;
    }
    


  • Katzenstreu schrieb:

    ...Diese Zahl quadriert daneben...
    ...
    d = c^2;

    das ist nicht 'hoch 2', sondern 'xor 2'.
    mach's so: d = c*c;
    🙂



  • Danke, fricky . Das wäre wohl das nächste Problem geworden :). Aber im Quellcode über dir war's schon aus meiner Intuition heraus verbessert.



  • Katzenstreu schrieb:

    Ganz allgemein: Wo schaue ich nach Funktionweisen und Beschreibungen von mir unbekannten Funktionen (wie atoi()) am besten im Internet nach?

    Manche mögen MAN, ich bevorzuge The C Library Reference.

    ;fricky schrieb:

    das ist nicht 'hoch 2', sondern 'xor 2'.
    mach's so: d = c*c;
    🙂

    Das wäre pow(x, y) aus <math.h> gewesen, aber das arbeitet mit float/double, für int ist frickys Multiplikation wesentlich günstiger.



  • Irgendwas sit mit dem eben veröffentlichten Code nicht in Ordnung.

    Zeile 7: [Warning] passing arg 1 of `atoi' makes pointer from integer without a cast

    Und auch hier gibts Gemecker:

    [Linker error] undefined reference to `SLEEP'



  • Katzenstreu schrieb:

    Irgendwas sit mit dem eben veröffentlichten Code nicht in Ordnung.

    Zeile 7: [Warning] passing arg 1 of `atoi' makes pointer from integer without a cast

    Ist ja klar. getchar() gibt int zurück und atoi(...) erwartet als Argument const * char . Wieso machst du's nicht einfach so, wie's hier im Beispiel beschrieben ist?

    Katzenstreu schrieb:

    Und auch hier gibts Gemecker:

    [Linker error] undefined reference to `SLEEP'

    Die Funktion heißt Sleep .


Anmelden zum Antworten