Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

C-Programm
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Ingenieurwissenschaften -> C-Programm
 
Autor Nachricht
Philipp Obergfell
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 21.05.2010
Beiträge: 45

BeitragVerfasst am: 29 März 2011 - 18:18:59    Titel: C-Programm

Hey,

Könnt ihr mir sagen was an diesem C-Programm falsch ist?

MfG Philipp

#include <stdio.h>


void main(void)
{double x1,x2,x3,a,b,c;
scanf("lf lf lf", x1,x2,x3);
a =(x1+x2+x3);
b =x1*x2 + x1*x3 + x2*x3;
c=x1*x2*x3;
printf("(x1-%lf)(x2-%lf) (x3-%lf)=",x1,x2,x3);
printf("%lfxhoch2 %lfx %lf\n",a,b,c);

}
Cheater!
Valued Contributor
Benutzer-Profile anzeigen
Valued Contributor


Anmeldungsdatum: 28.10.2007
Beiträge: 5225
Wohnort: Stuttgart

BeitragVerfasst am: 29 März 2011 - 18:36:34    Titel:

Meinst du die Semantik oder die Syntax?

"printf("(x1-%lf)(x2-%lf) (x3-%lf)=",x1,x2,x3); "

soll das

printf("(x-%lf)(x-%lf) (x-%lf)=",x1,x2,x3);

heißen?
79616363
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 04.04.2011
Beiträge: 6

BeitragVerfasst am: 04 Apr 2011 - 21:22:04    Titel:

Zitat:
Könnt ihr mir sagen was an diesem C-Programm falsch ist?


So ziemlich alles Laughing

Öhm, bei C hat main() grundsätzlich vom Typ int zu sein - Dass manche Compiler trotzdem auch den Typ void fressen, macht die Sache nicht richtiger. Es muss nicht unbedingt zu nem Fehler führen, aber es ist schlichtweg schlechter Stil!

Ein richtiger semantischer Fehler ist aber, dass scanf() (und Konsorten) Zeiger auf die Variablen braucht.
Korrekt müsste man also schreiben scanf("%lf %lf %lf", &x1,&x2,&x3);

Generell stimmt was mit den Formatstrings nicht ganz (auch bei printf()).

Korrekt und normenkonform wär also folgende Variante:
Code:

int main(void)
{
    double x1,x2,x3,a,b,c;

    scanf("%lf %lf %lf", &x1, &x2, &x3);
    a =(x1+x2+x3);
    b =x1*x2 + x1*x3 + x2*x3;
    c=x1*x2*x3;
 
    printf("(x1-%f)(x2-%f) (x3-%f)=",x1,x2,x3);
    printf("%fxhoch2 %fx %f\n",a,b,c);

    return 0;
}


Dieses Ding würd jetzt zumindest im Normalfall halbwegs das tun, was man erwartet.
Allerding steckt da noch mehr Sprengstoff drin, der schnell zu den sonderbarsten Ergebnissen führt.
Dazu gehört speziell, dass man den Rückgabewert von scanf() nicht ignorieren sollte und dass so der Eingabepuffer nicht geleert wird.
Spiel ein wenig damit rum, dann merkst Du schnell, was ich meine.
Diese Probs lösen wir dann, wenn Du sie mal am eigenen Leib verspürt hast - Dann merkt man sich's besser Wink

Viele Grüsse,

Uli
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Ingenieurwissenschaften -> C-Programm
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum