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); }
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?
>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
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 }
>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);
}}
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
>, insb. Kapitel 6.3: Rückgabewerte
ja da stottere ich gerade etwas aber Übung macht den Meister :D
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).
#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); }}
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.
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.
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).
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
@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); }
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.