scanf und struct als zeiger



  • Hallo Forumianer,

    ich verzweifle ..!!.. Folgendes SCANF in der eingabe-Funktion ändert einfach die Werte im Struct nicht. Lt. diversen Anleitungen im Netz und Büchern sollte es aber so funktionieren. Was mache ich falsch?

    #include "stdafx.h"
    #include <conio.h>
    
    struct komplex 
    { 
    	double t1; 
    	double t2;
    }; 
    
    void ausgabe(struct komplex z)
    {
    	printf("Eins: %f",z.t1); 
    	printf("\nZwei: %f",z.t2); 
    }
    
    void eingabe(struct komplex *z)
    {
    	printf("Eins eingeben: "); 
    	scanf("%f",&z->t1); 
    	printf("\Zwei eingeben: "); 
    	scanf("%f",&z->t2); 
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	komplex z1; 
    	eingabe(&z1); 
        ausgabe(z1); 
    	getch();
    }
    

    Vielen Dank für euere Mühe im voraus!

    Gruß

    Uwe



  • Versuchs mal mit

    void ausgabe(struct komplex z) 
    { 
        printf("Eins: %lf",z.t1); 
        printf("\nZwei: %lf",z.t2); 
    } 
    
    void eingabe(struct komplex *z)
    {
        printf("Eins eingeben: ");
        scanf("%f",&z->t1); 
        printf("\Zwei eingeben: "); 
        scanf("%f",&z->t2); 
    }
    

    Du liest da einen double Wert ein und gibst einen double Wert aus. Dann brauchst du "lf" und nicht "f".



  • uwie schrieb:

    Was mache ich falsch?

    Du lernst C.



  • Macht man bei uns so.
    Edit: Nein, bei uns gibt es natürlich schon eine Klasse std::complex ^^ (Aber auf dein Problem bezogen)



  • icarus2 schrieb:

    Du liest da einen double Wert ein und gibst einen double Wert aus. Dann brauchst du "lf" und nicht "f".

    Danke icarus2 für die superschnelle Antwort. Manchmal ist ein zusätzliches Augenpaar eben Gold wert.

    Thx Uwe



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    uwie schrieb:

    icarus2 schrieb:

    Du liest da einen double Wert ein und gibst einen double Wert aus. Dann brauchst du "lf" und nicht "f".

    Danke icarus2 für die superschnelle Antwort. Manchmal ist ein zusätzliches Augenpaar eben Gold wert.

    Das sieht dein Compiler auch. Du musst ihm bloß sagen, dass er dich auch warnen soll, wenn ihm etwas komisch vorkommt. Compiliere immer mit maximaler Warnstufe, behandle als Anfänger Warnungen wie Fehler.

    Ich wette icarus2 hat den Fehler so schnell gefunden, da er deinen Code einfach mal bei sich mit hoher Warnungsstufe compiliert hat.

    edit: Jetzt habe ich deinen Thread nach C verschoben, da er aussah wie C. Ein winzigkleines Details an deinem Code funktioniert so aber nur in C++. Sei dir darüber im klaren, dass C und C++ sehr unterschiedliche Sprachen sind. Benutze für C auch einen C-Compiler! Mischen von C und C++ ist auch eine ganz schlechte Idee, sofern man sich nicht sehr genau auskennt (und wenn man sich so gut auskennt, dann macht man es sowieso nicht mehr).



  • SeppJ schrieb:

    Ich wette icarus2 hat den Fehler so schnell gefunden, da er deinen Code einfach mal bei sich mit hoher Warnungsstufe compiliert hat.

    Meinst du echt, er hat dafür extra den Compiler angeschmissen?
    Da schaut man doch als erstes nach. Schon alleine bei dem Titel.


Anmelden zum Antworten