Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Switch Anweisung (http://www.informatikerboard.de/board/thread.php?threadid=1317)


Geschrieben von Matze84 am 14.11.2012 um 16:53:

  Switch Anweisung

Ich habe folgendes Programm geschrieben um einfach zu üben.

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:
 #include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
int i;
bool fehler=false, wiederholung=false;
char a;
do
{
do
{
puts("Geben Sie eine Zahl zwischen 1 und 30 ein";);
scanf("%d",&i);
if(i<1||i>30)
{
puts("Diese Zahl ist ungültig!";);
fehler=true;
}
else
{
fehler=false;
}
}
while(fehler);

while(i>0)
{
putchar('a');
i--;
}
puts("Das war lustig.nnNicht wahr?";);
puts("Willst du das nochmal wiederholen? (j/n)";);
scanf("%c",a);
switch(a)
{
case'j' : wiederholung=true;
break;
case'n' : wiederholung=false;
break;
default : puts("Egal was du eingegeben hast, es passt mir nicht!nIch werde mich jetzt selbst beenden. Ciao!n";);
}
}
while(wiederholung);
return 0;
}


Es soll so oft "peep" machen wie der User eingegeben hat (zwischen 1 und 30 mal).
Wenn die eingegegebene Zahl nicht zwischen 1 und 30 liegt soll er einen Fehler melden und nochmal bitten die Zahl einzugeben.
Wenn das "Peep" "Peep" fertig ist soll der User gefragt werden, ob er das wiederholen möchte.
Ich habe versucht das mit switch zu machen, weil ich genau das üben wollte. (es würde sicher auf mit IF gehen)

Nun zu der Frage:
Wenn ich das ganze Schritt für Schritt debugge, dann springt er zwar in die switch Anweisung, aber immer zu "default" und das will ich ja nicht.

Was habe ich bei der switch Anweisung falsch gemacht?
Lg matze



Geschrieben von Karlito am 14.11.2012 um 17:32:

 

Hallo,

a ist undefiniert und es wundert mich, dass das Programm nicht abstürzt.

In Zeile 34 musst du die Adresse von a übergeben und nicht a.

Also so:
code:
1:
2:
3:
scanf("%c",&a);


VG,

Karlito



Geschrieben von Matze84 am 14.11.2012 um 17:37:

 

Ja das Programm hatte sich auch irgendwie aufgehängt... Also es kam jedenfalls ein Fehler.....
Aber selbst mit
code:
1:
2:
3:
scanf("%c",&a);

springt er in den defaultZweig.
Ich kann nichtmal mein "a" (also meine antwort) eingeben.



Geschrieben von HueHang am 14.11.2012 um 17:41:

 

code:
1:
scanf(" %c",&a);

also mit einem Leerzeichen vor "%c", dann funktioniert es.



Geschrieben von Matze84 am 14.11.2012 um 17:46:

 

Zitat:
Original von HueHang
code:
1:
scanf(" %c",&a);

also mit einem Leerzeichen vor "%c", dann funktioniert es.


DANKE
Aber kannst du (oder jmd anders) mir evtl auch sagen warum ich da plötzlich ein "Leerzeichen" machen muss?
Weil erklären kann ICH mir das nicht.
unglücklich

Lg Matze



Geschrieben von HueHang am 14.11.2012 um 18:06:

 

Hier ist eine kleine Erklärung:
http://www.linuxforums.org/forum/programming-scripting/67560-problem-scanf.html#post355499


Forensoftware: Burning Board, entwickelt von WoltLab GmbH