C funzt nicht, so wie ich das will!

Hi Leute,

ich habe ein kleines "Programm" geschrieben, da der Quelltext zuviel Platz raubt, wollte ich ihn in 'ner *.txt anhängen, es gab aber immer Fehler beim Hochladen, so war ich gezwungen sie hier rein zu quetschen, sorry!

Meine Probleme!
1. Ich will das bild "löschen", also hab ich 'ne for-Schleife geschrieben, die 25 mal "\n" machen soll, die macht aber nur einen Zeilenumbruch? Schon beantwortet!!! :D
2. Ja ich weiß das ich die if von 1-4 in 'ne for bringen kann!
3. Warum funzt die 5te if nicht richtig?
4. Wie muss ich das Programm umschreiben, wenn ich mich z.B. von 1-3 "durcharbeite" und dann wieder in die 1 oder 2 springen will?
(Bitte Header + Funktion + Syntax erklären)

Ich bedanke mich schon jetzt für eure Antworten!

Code:
#include<stdio.h>

void loesche_bild(void){
int x;
for(x = 1; x <= 25; x++);
printf(\"\n\");
}

int main(){
int iEingabe, x;
int iGanz1, iGanz2, iGanz3;
float fGanz1, fGanz2, fGanz3;
char cZeichen1, cZeichen2, cZeichen3, cBeenden;
char cStrings1[20], cStrings2[20], cStrings3[20];

printf(\"\n\t\t\tEinlesen von Varb\n\");
printf(\"\nFuer Ganz-Zahl-Eingabe(1), Float-Zahl-Eingabe(2), Charakter-Zeichen-Eingabe(3),\n\t\t String-Zeichenfolge-Eingabe(4) und Beenden(5)\n\n> \");
scanf(\"%i\", &iEingabe);
getchar();

if(iEingabe==1){
  printf(\"\nBitte Ganz-Zahl eingen\n> \");
  scanf(\"%i\", &iGanz1);

  printf(\"\nBitte Ganz-Zahl eingen\n> \");
  scanf(\"%i\", &iGanz2);

  printf(\"\nBitte Ganz-Zahl eingen\n> \");
  scanf(\"%i\", &iGanz3);

  printf(\"\nDie Ganz-Zahlen wahren\n> %i %i %i\", iGanz1,iGanz2,iGanz3);
  
  getch();//weil, wenn es funzen würde, keine Möglichkeit besteht die Ergebnisse zu sehen!
  loesche_bild();

  printf(\"\n\nGanz-Zahl(1), Float-Zahl(2), Char(3), String(4) und Beenden(5)\n> \");
  scanf(\"%i\", &iEingabe);
}

if(iEingabe==2){
   printf(\"\nBitte Float-Zahl eingen\n> \");
   scanf(\"%f\", &fGanz1);

   printf(\"\nBitte Float-Zahl eingen\n> \");
   scanf(\"%f\", &fGanz2);

   printf(\"\nBitte Float-Zahl eingen\n> \");
   scanf(\"%f\", &fGanz3);

   printf(\"\nDie Float-Zahlen wahren\n> %f %f %f\", fGanz1,fGanz2,fGanz3);

   printf(\"\n\nGanz-Zahl(1), Float-Zahl(2), Char(3), String(4) und Beenden(5)\n> \");
   scanf(\"%i\", &iEingabe);
}

if(iEingabe==3){
   getchar();//muss gesetz werden sonst treten Fehler auf?
   printf(\"\nBitte Char eingen\n> \");
   scanf(\"%c\", &cZeichen1);
   getchar();//muss gesetz werden sonst treten Fehler auf

   printf(\"\nBitte Char eingen\n> \");
   scanf(\"%c\", &cZeichen2);
   getchar();//muss gesetz werden sonst treten Fehler auf

   printf(\"\nBitte Char eingen\n> \");
   scanf(\"%c\", &cZeichen3);
   getchar();//muss gesetz werden sonst treten Fehler auf

   printf(\"\nDie Char wahren\n> %c %c %c\", cZeichen1, cZeichen2, cZeichen3);

   printf(\"\n\nGanz-Zahl(1), Float-Zahl(2), Char(3), String(4) und Beenden(5)\n> \");
   scanf(\"%i\", &iEingabe);
}

if(iEingabe==4){
   getchar();//muss gesetz werden sonst treten Fehler auf?
   printf(\"\nEinlesen von Strings\\"[20]\\"\n\"); 
   printf(\"\nBitte String eingen\n> \");
   gets(cStrings1);

   printf(\"\nBitte String eingen\n> \");
   gets(cStrings2);

   printf(\"\nBitte String eingen\n> \");
   gets(cStrings3);

   printf(\"\nDie Strings wahren\n> %s %s %s\", cStrings1, cStrings2, cStrings3);

   printf(\"\n\nGanz-Zahl(1), Float-Zahl(2), Char(3), String(4) und Beenden(5)\n> \");
   scanf(\"%i\", &iEingabe);
}

if (iEingabe==5){
   printf(\"\nMoechten sie wirklich beenden? (J/N)\n> \");
   scanf(\"%c\",&cBeenden);
   getchar();
   
   if(cBeenden == 'j' || 'J'){
      printf(\"\n\n\tmade by Shark85\n\n\");
      getch();
      }

   else if(cBeenden == 'n' || 'N'){
      printf(\"\n\nGanz-Zahl(1), Float-Zahl(2), Char(3), String(4) und Beenden(5)\n> \");
      scanf(\"%i\", &iEingabe);
      getchar();
      }

   else{
      printf(\"\n\nFalsche Eingabe\a\");
      getch();
      }

}

return 0;
}
 
Ok, habs gefunden:
loesche_bild(){
int x;
for(x = 1; x <= 25; x++);
printf("\n");
}
Es war das "blöde" Semi!(rot, dat muss weg)

Jetzt fehlt nur noch die 4te und 5te Frage, also ich bin schon gespannte, wie die Lösung denn aussehen mag! :P
 
Ich würde das komplette Progamm ab der Zeile 16 in eine while-Schleife packen. Wenn Du Anfangs statt einem Buchstaben eine Zahl eingibst, folgt ein Laufzeitfehler. Mit einer while-Schleife könntest Du bestimmen, daß das Programm bei einer falschen Eingabe wieder an den Schleifenanfang springen soll.

Genauso würde ich das bei der "Option" Beenden machen.

Statt in den If-Bedingungen Buchstaben zu verwenden, beschränke Dich dabei besser auf ASCII-code (z.B. verwende statt dem j die 106, statt dem J die 74, statt dem n die 110 und statt dem N die 78)

Ich hab Dir hier mal ein Beispielprogramm geschrieben:



Code:
#include <stdio.h>

loesche_bild();  // Funktionsprototyp
beenden();

void main()
{
char menue;


while (1)    // Endlosschleife
{
loesche_bild();

printf(\"Programmanfang\n\n\");
printf(\"(1) Option1\n\");
printf(\"(2) Option2\n\");
printf(\"(3) Option3\n\");
printf(\"(Q) Quit\n\");

printf(\"\n\nIhre Eingabe: \");
scanf(\"\n%c\",&menue);    // beachte den Zeilenumbruch vor %c


if(menue == 81 || menue == 113)    // Quit
        {
        beenden();    // Hier rufst Du die Funktion Beenden auf
        }

        if(menue == 49)   // Option 1
        {
        printf(\"Option 1\n\");
        getch();
        // Hier steht der Code für Option 1 ... kannst Du auch in Funktionen packen
        }

        if(menue == 50)    // Option 2
        {
        printf(\"Option 2\n\");
	     getch();
        // Hier steht der Code für Option 2 ... kannst Du auch in Funktionen packen
        }

        if(menue == 51)    //  Option 3
        {
        printf(\"Option 3\n\");
        getch();
        // Hier steht der Code für Option 3 ... kannst Du auch in Funktionen packen
        }

}    // Ende der While-Schleife


}    // Ende von Main




loesche_bild()
{
int x;
for(x=1; x<=30; x++)
printf(\"\n\");
return 0;
}


beenden()
{
char x;

while (1)    // Endlosschleife
{
printf(\"Möchten Sie das Programm wirklich verlassen (J/N > \");
scanf(\"\n%c\",&x);

if (x == 106 || x == 74)
{
exit(1);
}

if (x == 110 || x == 78)
{
break;
}

}    // Ende der While-Schleife

}    // Ende der Funktion
 
@evil:
warum soll er nicht die Buchstaben benutzen?
Der Code wird deutlich besser lesbar und ist weniger fehleranfällig als wenn er den ASCII Code benutzt
imho
 
aber es ist bei weitem nicht so gehax0rt :D

ehrlich gesagt hab ich auch keine ahnung. sorry für diese ausgeburt an redundanz.
 
@TheEvilOne

danke nochmals, der Quelltext hat mir sehr geholfen,
aber was bewirkt denn genau das
Code:
(\"\n%c\",&menue);    // beachte den Zeilenumbruch vor %c
????
Noch 'ne Frage, wie kann ich in C die Systemuhr ausgeben lassen, also die aktuelle Zeit! ?(

mfg Shark85
 
wie es genau heisst, weiss ich nciht, aber guck mal in der time.h ... da sind die Funktionen dazu drin :D
 
Du holst mit scanf die Eingabe an die Adresse wo "menu" steht.
Und durch das "%c" als char

Zeit

time_t zeit; /* deklariere zeit vom Typ t_time */

zeit = time(NULL); /* hole zeit in "zeit" */
 
Hi Leute,

ich habe gefragt ob mir jemand sagen kann, wie ich die Uhrzeit in ein C-Programm rein bekomme!
Es hat mir aber immer noch keiner richtig geantwortet!!!

@Gulliver
ich denke doch, das die "Befehle" für C++ sind und nicht für C! Es dürfte mit clock(); irgendwie funzen, aber wie? ?(

PS:
Vielleicht könnt ihr mir auch noch sagen wie ich z.B. 'ne Bilddatei in einem C-Programm anzeigen kann und ob es da Einschrenkungen gibt(direkt in der Konsole)? ?(
Oder z.B. Solitär aufrufen kann, also starten? ?(

Ja ich weiß ich habe viele viele Fragen :D und keiner den ich kenne, kann sie mir wirklich beantworten ;(
 
shark85:

du kannst dir die aktuelle SystemZeit mit C so holen :

int zeit=time(NULL);

das Problem ist : das sind Sekunden seit XXXX (kA seit wann genau)
umrechnen musst DU es dann :D
 
@shark

"Hi Leute,

ich habe gefragt ob mir jemand sagen kann, wie ich die Uhrzeit in ein C-Programm rein bekomme!
Es hat mir aber immer noch keiner richtig geantwortet!!!

@Gulliver
ich denke doch, das die "Befehle" für C++ sind und nicht für C! Es dürfte mit clock(); irgendwie funzen, aber wie? [verwirrt]"

1)
Das SIND C Funktionen (und keine Befehle)....vielleicht wirfst Du mal einen
BLick in Deine header..oder auch mal in ein Buch...

2)
Du kannst keine "BIlder" auf die Konsole selber holen.

3)
Programm aufrufen:
Beschreib mal mit welcher Entwicklungsumgebung (und ob überhaupt)
du arbeitest.

p.s. allerdings weiss ich nicht ob das unter win ebenso läuft.
 
Oder z.B. Solitär aufrufen kann, also starten?

ginge so :

#include stdlib.h

main
{
system ("%systemroot%\solitaire.exe");
}
------------------------------------------------------------
du willst also ein Bild da reinbringen.. du weisst das die Konsole Standartmässig genau 80X25 beherrbergt???
was soll das fürn Bild sein?
 
Hi Leute,

@ Watchme
Es ist eigentlich nicht wirklich ein Bild, also ich will in C ein Kartenspiel Programmieren, die Karten habe ich mit ASCII-Zeichen erstellt, so sieht das aus:
Code:
#include<stdio.h>

main()
{

H1(), H2();//und so weiter

return 0;
}
H1(){
char  cHerz = 03, cKaro = 04, cKreuz = 05, cPiek = 06, cNix = 0;
char cOr = 187, cOl = 201, cMh = 186, cMv = 205, cUr = 188, cUl = 200;
char eins = 49, zwei = 50, drei = 51, vier = 52, fuenf = 53, sechs = 54, sieben = 55, acht = 56, neun = 57, jok = 74, bub = 66, dam = 68, koen = 75;

printf(\"\n %c%c%c%c%c%c%c \", cOl,  cMv,  cMv,  cMv, cMv, cMv, cOr);
printf(\"\n %c%c%c%c%c%c%c \", cMh, eins, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cHerz, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, eins, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cUl,  cMv,  cMv,  cMv, cMv, cMv,  cUr);
getch();
}

H2(){
char  cHerz = 03, cKaro = 04, cKreuz = 05, cPiek = 06, cNix = 0;
char cOr = 187, cOl = 201, cMh = 186, cMv = 205, cUr = 188, cUl = 200;
char eins = 49, zwei = 50, drei = 51, vier = 52, fuenf = 53, sechs = 54, sieben = 55, acht = 56, neun = 57, jok = 74, bub = 66, dam = 68, koen = 75;

printf(\"\n %c%c%c%c%c%c%c \", cOl,  cMv,  cMv,  cMv, cMv, cMv, cOr);
printf(\"\n %c%c%c%c%c%c%c \", cMh, zwei, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cHerz, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cHerz, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, zwei, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cUl,  cMv,  cMv,  cMv, cMv, cMv,  cUr);
getch();
}

//und so weiter

Ich kann sie aber nur untereinander aufrufen, da macht mir das "\n" einen strich durch dir Rechnung. So habe ich mir gedacht, das ich ein screenshot mache und sie dann nebeneinander einfüge kann oder hast du eine bessere Idee?
Meinst du mit 80X25 die Pixel des "Bildes"???

Dein Quelltext hat mir weiter geholfen, aber er muss ein bisschen anders "formatiert" werden damit es funzt
Code:
#include <stdlib.h>
main()
{
int zeit=time();

system (\"%SystemRoot%\\System32\\sol.exe\");
getch();
return 0;
}
@ Gulliver
Habe die Zeit jetzt rein bekommen, aber wie Watchme gesagt hat sind es Sekunden!! Es muss doch irgendwas geben was ich für "NULL"
int zeit=time(NULL);//"NULL" kann auch weg gelassen werden!
eingeben kann, was mir die Zeit richtig formatiert!!?
Das SIND C Funktionen (und keine Befehle)....
Da hast du recht habe mich geirrt, mit dem C++! Aber "Befehle" habe ich extra in "" gesetzt, musst schnell gehen :D


PS: Ich Programmiere mit DEV-C++!
 
wegen dem Karten nebeneinander ausgeben:

du musst sie einfach zeilenweise und nicht kartenweise betrachten ...
also ich wuerde die einzelnen Karten in string arrays stecken und bei der Ausgabe zeilenweise aneinanderfügern (natürlich mit mindestens einem Leerzeichen dazwischen)

wenn du allerdings "echte" Grafik willst, musst du vorher den Bildschirmmodus ändern
 
Hi Leute,

wie schon gesagt arbeite ich mit DEV C++ und ich will jetzt alles in arrays setzten(wegen der Übersichtlichkeit),:D
habe nur ein Problem.
Code:
#include<stdio.h>

char  cHerz = 03, cKaro = 04, cKreuz = 05, cPiek = 06, cNix = 0;
char cOr = 187, cOl = 201, cMh = 186, cMv = 205, cUr = 188, cUl = 200;
char null = 48, eins = 49, zwei = 50, drei = 51, vier = 52, fuenf = 53, sechs = 54, sieben = 55, acht = 56, neun = 57, jok = 74, bub = 66, dam = 68, koen = 75, ass =65;

char KarteOben[36] = \"TPPPPPW\";//Der Kompiler formatiert die Zeichen aber nicht nach der ASCII-Tabelle!!???
\\z.B. in Word o. normalen WinEditor (Tastenkombination: Alt 201; Alt 205; Alt 187) bekomme ich chinesische Zeichen, im Kompiler aber nit!
main()
{

Htest();

return 0;
}

Htest(){
printf(\"\n %s \",KarteOben);//soll die darunterliegende Zeile ersetzen, wenn es funzen würde
printf(\"\n %c%c%c%c%c%c%c \", cOl,  cMv,  cMv,  cMv, cMv, cMv, cOr);
printf(\"\n %c%c%c%c%c%c%c \", cMh, eins, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cHerz, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, cNix, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cMh, cNix, cNix, cNix, cNix, eins, cMh);
printf(\"\n %c%c%c%c%c%c%c \", cUl,  cMv,  cMv,  cMv, cMv, cMv,  cUr);
getch();
}
Ich Kappiere einfach nicht warum er es in %c(einzelnes Zeichen) richtig und in %s(Zeichenkette) falsch macht!?????
Habt Ihr einen Tipp für mich wie es funzen könnte!??
 
@shark

char KarteOben[36] = "TPPPPPW"

so was geht auch nicht.
Entweder

char blae[5] = { "A","B"...};

oder
char bla[5];strncpy(bla, "AABB");

Wie wärs wenn du dir erstmal die grundlagen von arrays und stringformatierung anschaust ?
 
Hi

@ Gulliver
Ich habe mich vielleicht ein bisschen kompliziert ausgedrückt, noch mal von vorne. Ich frage mich eigentlich nur, warum der Compiler keine chinesischen Zeichen ausgibt(siehe ASCII), die ich für den Kartenrand benötige.
siehe vorherige Antwort!
Code:
char KarteOben[36] = \"TPPPPPW\"
Wo TPPPPPW steht sollen die chinesischen Zeichen hin, dat funzt aber nit!!!(Diese werden immer durch andere Zeichen ersetzt, dummerweise)
 
Zurück
Oben