Forum: PC-Programmierung C/funktionen


von Azubi (Gast)


Lesenswert?

Hallo ich bin C-neuling :(

kann mir einer sagen wie ich mein Rückgabewert auf dem Bildschirm 
ausgeben kann :(

#include <stdio.h>
#include <stdlib.h>



int vorzeichen(double a) {

    if(a>0.0)
        return (1);


        else if(a<0.0)
            return (-1);

            else
                return (0);



}


int main()
{
    double a;
    int b;

    b=vorzeichen;




    printf("\nGeben sie bitte eine Zahl ein: ");
    scanf("%d",&a);

    vorzeichen (a);


    printf("\n%i\n",b);


}

von Hunt W. (hunt_work_er)


Lesenswert?

Was macht er denn da?

Azubi schrieb:
> b=vorzeichen;

 Was ist "vorzeichen"?


Azubi schrieb:
> vorzeichen (a);

Wo schreibt er den return-Wert von vorzeichen(a); hin?


Azubi schrieb:
> printf("\n%i\n",b);

Was steht denn in b drinn?

von Timmo H. (masterfx)


Lesenswert?

>scanf("%d",&a);
schau lieber nochmal was scanf bei "%d" für einen Datentyp erwartet. Das 
"d" steht jedenfalls nicht für "double".

Generell solltest du erstmal ein C-Buch lesen

von Flexbex (Gast)


Lesenswert?

na mach doch einfach
b=vorzeichen(a);

dafür brauch a aber nen Wert deshalb kommt das erst nach deinem scanf 
befehl

und denk mal nach wo du noch geschweifte klammern in der else Schleife 
von der funktion brauchst. immer wenn du im if oder else zweig mehr als 
einen befehl ausführen wilst brauchst du die klammern

z.B
else
{
  if(xyz>1)
     befehl1
  else
     befehl2
}

von Azubi (Gast)


Lesenswert?

>Generell solltest du erstmal ein C-Buch lesen

ich lese ein C-Buch :D und es heißt "C programmieren von Anfang an".
Ich bin eigentlich ein Elektrotechnik-Azubi würde aber total gerne C 
lernen
weil es tierischen spass macht danke für eure hilfe jetzt klappts

Könnt ihr mir vlt noch Tipps zu meiner Anordnung geben ist das Programm 
so gut geschrieben?

#include <stdio.h>
#include <stdlib.h>



int vorzeichen(double a) {

    if(a>0.0) {
        return (1);}


        else if(a<0.0) {
            return (-1);}

            else{
                return (0);}



}


int main()
{
    double a;
    int b;


    while(1) {


    printf("\nGeben sie bitte eine Zahl ein: ");
    scanf("%lf",&a);


    b=vorzeichen(a);


    vorzeichen (a);


    printf("\n%i\n",b);


}}

von Timmo H. (masterfx)


Lesenswert?

Azubi schrieb:
>>Generell solltest du erstmal ein C-Buch lesen
>
> ich lese ein C-Buch :D und es heißt "C programmieren von Anfang an".
Gutes Buch. Habe ich damals auch C mit gelernt. Also lies erstmal 
weiter, insb. Kapitel 6.3: Rückgabewerte

von Azubi (Gast)


Lesenswert?

>, insb. Kapitel 6.3: Rückgabewerte
ja da stottere ich gerade etwas aber Übung macht den Meister :D

von Timmo H. (masterfx)


Lesenswert?

bspl0033 zeigt dir eigentlich genau was du brauchst.
Mach nicht alles auf einmal. Immer schön der reihe nach und brav die 
Beispiele durcharbeiten und die Aufgaben lösen (selbstständig! dann 
lernt man es auch).

von Flexbex (Gast)


Lesenswert?

#include <stdio.h>
#include <stdlib.h>



int vorzeichen(double a) {

    if(a>0.0) //hier reicht auch ne 0
        return (1);


        else
           {//das ganze ist doch dein else zweig
            // also mach auch um alles die klammern
            if(a<0.0) //hier reicht auch ne 0
                return (-1);

            else
                return (0);
            }
// oder kurz
// return (a>0)? 1:((a<0)? -1:0);

}


int main()
{
    double a;
    int b;


    while(1) {


    printf("\nGeben sie bitte eine Zahl ein: ");
    scanf("%lf",&a);


    b=vorzeichen(a);


    vorzeichen (a);//warum führste die nochmal aus


    printf("\n%i\n",b);


}}

von Hans Ulli K. (Gast)


Lesenswert?

Hallo,

mein Buch war zum Anfang "Programmieren in C: Mit dem C-Reference Manual 
in deutscher Sprache" (Auch die C-Bibel genannt).

Was mir so gerade auffällt, veruche wenn es geht zu Anfang dir ein 
Coding Style auch mit anzulernen. Dmait meine ich wie du dienen 
Programmcode schreibst und formatierst. Das hilft bei größeren Projekten 
ungemein.

von Rolf Magnus (Gast)


Lesenswert?

Flexbex schrieb:
> #include <stdio.h>
> #include <stdlib.h>
>
>
>
> int vorzeichen(double a) {
>
>     if(a>0.0) //hier reicht auch ne 0

Die würde dann eben implizit in 0.0 konvertiert. Zur Übersicht ist aber 
0.0 besser. Genau wie man bei einem Zeichen auch '\0' oder bei einem 
Zeiger NULL schreiben würde. Auch in diesen Fällen wäre 0 genauso 
möglich.

> // oder kurz
> // return (a>0)? 1:((a<0)? -1:0);

Das ist weder leichter lesbar, noch für einen Anfänger, der gerade mit 
return-Werten kämpft, besser verständlich.

von 77 (Gast)


Lesenswert?

Flexbex schrieb:
> und denk mal nach wo du noch geschweifte klammern in der else Schleife
> von der funktion brauchst. immer wenn du im if oder else zweig mehr als
> einen befehl ausführen wilst brauchst du die klammern
>
> z.B
> else
> {
>   if(xyz>1)
>      befehl1
>   else
>      befehl2
> }

Nichts für ungut, aber wo wir grad beim Thema Code-Style sind: das o.g. 
ist Schwachsinn. Ein
1
 if(xyz>1)
2
      befehl1
3
   else
4
      befehl2

ist ein einziges Statement, deshalb braucht man die {} hier nicht, sie 
würden nur den Lesefluss stören.
1
    if(a>0.0)
2
        return (1);
3
    else if(a<0.0)
4
        return (-1);
5
    else
6
        return (0);

ist absolut richtig (abgesehen davon dass die klammern bei return eher 
ungewöhnlich sind).

von Andreas W. (geier99)


Lesenswert?

77 schrieb:

> ist ein einziges Statement, deshalb braucht man die {} hier nicht, sie
> würden nur den Lesefluss stören.

Im Prinzip ist das Richtig, stellt aber ein Fehlerpotenzial dar, falls 
man mal nachträglich den Code erweitert und vergisst die Klammern dann 
zu setzen.

Deshalb werden bei mir alle IF-Anweisungen komplett geklammert auch wenn 
es eigentlich nicht nötig ist.

Eine passende Anekdote zu dem Thema findest du hier :
http://books.google.de/books?id=ghPpxY-uB7UC&printsec=frontcover&hl=de&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false

auf der Seite 215  (vorallem der letzte Absatz)

Ansonsten gilt: Jeder soll es so machen wie er es mag :-)

Gruss
 Andi

von Flexbex (Gast)


Lesenswert?

@77
ja hab ich ja auch nich mit { klammern geschrieben. ich meinte ja wenn 
da nur ein Statement kommt braucht man die NICHT die klammern.
Das man bei
  if(a>0.0)
        return (1);
    else if(a<0.0)
        return (-1);
    else
        return (0);
auch keine braucht wusste ich nicht. Ich würde aber auch hier klammern 
setzen wie Andreas auch sagt. einfach wegen der Übersicht
so siehts irgendwie besser aus

  if(a>0.0)
        return (1);
    else
    {
        if(a<0.0)
            return (-1);
        else
            return (0);
     }

von 77 (Gast)


Lesenswert?

Flexbex schrieb:
> if(a>0.0)
>         return (1);
>     else
>     {
>         if(a<0.0)
>             return (-1);
>         else
>             return (0);
>      }

Also gerade wegen der Übersicht würde ich es sein lassen. Was ist, wenn 
da 10 Bereichsabfragen kämen? Dann würde man ja bei jeder Abfrage ne 
Einrückungsebene tiefer gehen!

Was man machen kann (und was Andreas W. wahrscheinlich gemeint hat, 
dessen Link ich btw nicht lesen kann, da ich nicht die Berechtigung für 
das volle Buch habe) ist, um jeden Block Klammern schreiben, z.b.
1
if(bla) {
2
   ...
3
} else if() {
4
   ...
5
} else {
6
   ...
7
}

von Hans Ulli K. (Gast)


Lesenswert?

Andreas W. schrieb:
>
> Eine passende Anekdote zu dem Thema findest du hier :
> 
http://books.google.de/books?id=ghPpxY-uB7UC&printsec=frontcover&hl=de&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
>
> auf der Seite 215  (vorallem der letzte Absatz)
>
> Ansonsten gilt: Jeder soll es so machen wie er es mag :-)
>

Finde ich aber nicht.
Ich habe mir mal den Absatz auf der Seite durchgelesen.
1
if (test > 0)
2
func1();
3
4
func2();
das da irgendwann ein Fehler auftritt ist logisch deshalb schreib man 
auch so
1
if (test > 0)
2
        func1();
3
4
func2();
Auch ist ein
1
if (test > 0) func1();
verpönt.

77 schrieb:
>
1
> if(bla) {
2
>    ...
3
> } else if() {
4
>    ...
5
> } else {
6
>    ...
7
> }
8
>

ist richtig.
Bei switch/case werden beide in der selben Spalte gesetzt.
1
switch (a) {
2
case 1:
3
case 2:
4
case 3: func1();
5
        break;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.