Christbaum
-
Hi @ all
Ich hab das ganze gestern noch geschrieben und es funktioniert und ich bin tottal happy
/*Christbaum - For Robert Schilling 23.12.2005*/ #include <stdio.h> #include <conio.h> void main (void) { int a,b,c; int hoehe,sth,le,st; char s[100]; do { printf("\nGeben Sie bitte die Hoehe ein [max 40]: "); gets(s); sscanf(s,"%d",&hoehe); if (0>=hoehe|hoehe>=40) printf("Sie haben eine inkorrekte Eingabe gemacht\n"); } while (0>=hoehe|hoehe>=40); for(a=1;a<=hoehe*2;a+=2) { for(b=hoehe-a/2;b>0;--b) { printf(" "); } for(c=1;c<=a;c++) { printf("*"); } printf("\n"); } for(sth=1;sth<=hoehe/3;sth++) { for(le=1;le<=hoehe-(hoehe/4);le++) printf(" "); for(st=1;st<=hoehe/2;st++) printf("*"); printf("\n"); } printf("\n\nHappy X-Mas\n\n"); getch(); }
Gibts da noch Verbesserungen ???
Happy X-Mas
Gruß Robert
-
printf(" ") -> putchar(' ')
printf("yadda\n") -> puts("yadda")
getch() -> getchar()
gets(s) -> fgets(s, laenge von s in bytes, stdin);
| ist ein bitoperator. fuer logik nimm ||
mehr leerzeichen in den befehlen verwenden: eins nach jedem komma und semikolon (aber nicht davor), je eins vor und nach einem gleichheitszeichen. keines vor einer schliessenden klammer und keines nach einer oeffnenden klammer, dafuer aber ein leerzeichen vor einer oeffnenden klammer und eines nach einer schliessenden klammer.
liest sich besser.es heisst int main. am ende bitte auch ein return 0 oder wonach dir der sinn steht.
saubere einrueckung: dein do-while ist deformiert, die beiden verschachtelten for loops danach sind eine ebene zu weit eingerueckt, bei deinem letzten for-loop ist die oeffnende blockklammer eine ebene zu weit drin.
-
Danke
Wie kann ich ungegrade Zahlen filtern?
zb so
if (hoehe="gerade")
for...
else
for...Danke im Voraus
Gruß Robert
-
es heißt
if(hoehe=="gerade")
Gerade/Ungerade lässt sich wunderbar mit modulo-rechnung filtern (zeichen
es berechnet den rest
5 % 2 = 1
6 % 2 = 0
16 % 5 = 1von der art her ganz logisch, du musst
hoehe % 2
rechnen.
was was ist solltest du ganz leicht kapieren (es können nur 1 und 0 entstehen)
-
Danke das geht super
-
Achja: IMMER int main() schreiben! ALles andere ist Bullshit!
-
Und warum
-
ItsNotYou schrieb:
es heißt
if(hoehe=="gerade")
nicht, wenn du stringinhalte vergleichen willst. ein pointervergleich mit einem stringliteral ist falsch, da sinnlos.
es heisst int main und fertig! so stehts im standard, so wirds gemacht. grund: ein programm hat einen rueckgabewert, der den erfolg/misserfolg des programmes angibt. deswegen return 0;, wenn alles gut gelaufen ist.
-
Danke
:xmas1:
-
c.rackwitz schrieb:
ItsNotYou schrieb:
es heißt
if(hoehe=="gerade")
nicht, wenn du stringinhalte vergleichen willst. ein pointervergleich mit einem stringliteral ist falsch, da sinnlos.
es heisst int main und fertig! so stehts im standard, so wirds gemacht. grund: ein programm hat einen rueckgabewert, der den erfolg/misserfolg des programmes angibt. deswegen return 0;, wenn alles gut gelaufen ist.
ich habe nur noch mal das if([...]) aufgenommen und das mit dem == klargestellt, das war kein bezug auf "gerade"...
-
nichtsdestotrotz sind diese beiden varianten korrekt aber zweifelhaften sinnes:
if (foo = "bar")... if (foo == "bar")...
laesst sich so schreiben:
foo = "bar"; // da das if immer true sein wird. ein string liegt schliesslich nicht an adresse null if (!strcmp(foo, "bar"))... // wenn man c strings vergleichen will
wollt ich nur der vollstaendigkeit halber losgeworden sein.