Folgendes Problem ...
-
soll ein Programm schreiben, das einen Tannenbaum in die Konsole zeichnet mit Leerzeichen und x.
x
xxx
xxxxx
xxxxxxx
xxxxxxxxxHabe folgendes geschrieben:
#include <stdio.h> int main() { char x = 'x' , blanc = ' '; int count = 1; do { printf(" %20c %1c\n",blanc, x); count = count +1; } while(count <= 4); getchar(); getchar(); }
Das zeichnet aber nur:
x
x
x
xWie kann ich es erreichen das er in der Schleife jeweils zwei leerzeichen abzieht und zwei x addiert?
Brauche dringend hilfe, sitze gerade im Unterricht
Danke. Danke.
-
Helft mir mal bitte.
Danke.
-
Es werden jede Zeile 2 Kreuzchen mehr, also musst Du links ein Leerzeichen weniger drucken (zur einrückung, die man nicht erkennen kann). Wenn man das systematisch zerlegt, dann sollte man recht schnell auf die Löung kommen; wenn es nicht funktioniert, frag konkret nach.
-
Also dann konkret:
Das Programm druckt erst 20 Leerzeichen.
printf("%20c",blanc); -->genauer siehe oben
wenn ich in der Schleife veranlassen will, dass die Leerzeichen immer um zwei abnehmen, habe ich versucht das so zu machen.
blanc = blanc -2; funzt nicht
x = x +2; funzt nichter ändert ja auch nicht automatisch %20c in %18c um
außerdem kann es nicht funktionieren wenn man definiert char x = `x` und dann 2 addiert.
Kann mir jemand eine für C elegante und professionelle Lösung geben ( vorzugsweise mit meinem Quelltext als Basis) Danke
-
#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int lines = argc >= 2 ? atoi(argv[1]) : 6; int i, empty = lines/2 + lines % 2 + 1, cross = 1; for (i = 1; i < lines; ++i) { int j; for (j = 0; j < empty; ++j) putchar(' '); --empty; for (j = 0; j < cross; ++j) putchar('x'); cross += 2; putchar('\n'); } return 0; }
[ Dieser Beitrag wurde am 27.06.2003 um 14:37 Uhr von Daniel E. editiert. ]
-
Aha, danke. Es funktioniert. Ich bin gerettet.
Habe zwar noch keine Zeiger und Zeiger auf Zeiger gehabt und argc, arcv und atoi sagen mir auch nichts, aber vielleicht hast du zeit mir das kurz zu erklären zumindest die namen der Variablen.
-
Original erstellt von <Gast>:
**Aha, danke. Es funktioniert. Ich bin gerettet.Habe zwar noch keine Zeiger und Zeiger auf Zeiger gehabt und argc, arcv und atoi sagen mir auch nichts, aber vielleicht hast du zeit mir das kurz zu erklären zumindest die namen der Variablen.**
die erste Zeile ( int lines = argc >= 2 ? atoi(argv[1]) : 6 )
bedeutet:
wenn argc größer 2 ist dann wandel das zweite Argument aus der Kommandozeile in ein int um. Ansonsten nimm den Wert 6;masin(int argc,char **argv)
sind die kommandos die übergeben werden.
Wenn du z.B. dein Programm ´so in der Konsole aufrufst:
MyProg Hello FuckTheWorld 666
Dann wäre argc=4
und argv[0]=MyProg
und argv[1]=Hello
und argv[0]=FuckTheWorld
und argv[0]=666
-
Mist! Das Programm von Daniel E. funktioniert doch nicht. Kriege jetzt bei der Ausführung der .exe immer Fehlermeldungen, von wegen Speicher und so.
Kann es jemand mal ausprobieren und falls es nicht an meiner Maschine liegt noch mal umschreiben.
Danke
-
wie gut dass ich alle übungen der ersten klasse aufgehoben habe
#include <stdio.h> #include <conio.h> void main() { int zzahl; int i; printf("Geben Sie die Anzahl der Zeilen ein, die der Christbaum beanspruchen soll: "); scanf("%d",&zzahl); printf("\n"); for(i=0;i<zzahl;i++) { for(int k=zzahl;k>i;k=k-1) { printf(" "); } for(int j=1;j<=i;j++) { printf("*"); } for(j=0;j<=i;j++) { printf("*"); } printf("\n"); } getch(); }
-
Original erstellt von <Gast>:
Mist! Das Programm von Daniel E. funktioniert doch nicht. Kriege jetzt bei der Ausführung der .exe immer Fehlermeldungen, von wegen Speicher und so.Ich hatte das Programm zwar nicht getestet, kann aber trotzdem keinen Fehler entdecken. Verrate mal die Fehlermeldung und stelle sicher, dass Du das richtige Programm übersetzt hast.
-
...oder könnte es auch am Betriebssystem liegen? Bin nämlich vor kurzem auf MS Longhorn M5 umgestiegen und das ist 64-Bit, während die Compiler ja 32-Bit Software sind. Kann ja sein, dass da nicht mehr die korrekten Speicheradressen bei 32-Bit software angesprochen werden oder es beim Compilieren zu Konflikten kommt. Werde es jetzt noch mal auf einer XP Maschine versuchen.
-
*gg* ich habs auch mal schnell geschrieben
Meine Variante sieht dann so aus:#include <stdio.h> #include <stdlib.h> void draw(int Anzahl,char Zeichen); void wait (); int main() { int iZeichen1=1, iZeichen2; printf("Geben Sie die Anzahl der Zeilen ein, die der Christbaum beanspruchen soll: "); scanf("%d",&iZeichen2); for(; iZeichen2>0; iZeichen2--) { puts("\n"); draw(iZeichen1,'*'); draw(iZeichen2,' '); iZeichen1++; } wait(); return 0; } void draw(int Anzahl,char Zeichen) { int i; for(i=0;i<Anzahl;i++) putchar(Zeichen); } void wait () { setvbuf ( stdin , NULL , _IONBF , 0 ); setvbuf ( stdin , NULL , _IOFBF , BUFSIZ ); while ( getchar() != '\n' ); }
@Daniel Warum die ganzen Berechnungen??