BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- C Programm funktioniert nicht, wie es soll (http://www.black-board.net/thread.php?threadid=11342)


Geschrieben von Watchme am 31.03.2003 um 18:55:

Achtung Programm funktioniert nicht, wie es soll

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?
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:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
#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;
}



Geschrieben von Brain15 am 31.03.2003 um 19:15:

 

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 7 8)

Ich hab Dir hier mal ein Beispielprogramm geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
#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



Geschrieben von phlox81 am 31.03.2003 um 20:03:

 

Hm, der Quelltext zeigt mir das du wohl noch nicht lange
mit C arbeitest.

Eine Funktion 'löschebild' brauchst du nicht, rufe einfach
system("cls"); auf.

Statt den ganzen If blöcken könntest du sie
mit einem Switch-case Block ersetzen, das würde
den Code auch übersichtlicher machen.

Dann warum zeigst du das Menü noch mal zum schluss der Ifblöcke ein ?
Macht eigentlich keinen Sinn.

Devil


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH