C/funktionen

Gast #2983723
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);


}
Gast #2983739
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
}
Gast #2983798
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);


}}
Gast #2983836
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);


}}
Gast #2983885
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.
Gast #2983907
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.
Gast #2983944
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).
#2984003
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
Gast #2984071
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);
     }
Gast #2984314
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
}
Gast #2984428
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren