getch(); in C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • getch(); in C++

    Hallo. Ich habe eine Frage. In C hatte diese unsichtbare Eingabeaufforderung:

    Quellcode

    1. char y;
    2. y=getch();
    3. if(y=='a');
    4. {
    5. Beep(440,200)
    6. }
    7. if(y=='b');
    8. {
    9. Beep(900,200)
    10. }
    11. if(y=='c');
    12. {
    13. Beep(500,300
    14. }
    15. if(y=='d');
    16. {
    17. return 0;
    18. }
    19. {}
    Alles anzeigen


    Wenn ich dasselbe in C++ versuche, geht es nicht. Es wird immer ein Fehler bei y=getch() angezeigt.


    Im Header ist eig. auch alles drin:

    Quellcode

    1. #include <cstdlib>
    2. #include <iostream>
    3. #include <windows.h>
    4. #include <stdio.h>
    5. using namespace std;
    6. int main(int argc, char *argv[])
  • Kein Ahnung welchen Compiler du da hast.

    Der gcc/g++ zeigt folgende Meldung:

    Quellcode

    1. getch001.cpp:12: error: 'getch' was not declared in this scope
    2. getch001.cpp:17: error: expected ';' before '}' token
    3. getch001.cpp:22: error: expected ';' before '}' token
    4. getch001.cpp:27: error: expected ')' before '}' token
    5. getch001.cpp:27: error: expected ';' before '}' token


    getch ist compiler und betriebssystem-abhängig :!:

    in welchem Header sollte man dann erst nachsehen :?:

    Ausserdem bewahrt es dich vor einigen seltsamen Effekten, wenn du dich bei den Header entweder für C-Header oder, wenn es C++ werden soll, so weit möglich dann für die C++ Header.

    Der Header

    Quellcode

    1. #include <windows.h>

    gibt es ja nur in der C-Variante. Aber das passt schon. MS hat da ja sein eigenen Vorstellungen einer C-Ähnlichen Sprache realisiert.

    DEV-C++ ist kein Compiler sondern eine IDE mit einem älteren MinGW-Compiler dahinter.
    Wenn du damit klarkommst, sattele um auf Code::Blocks 10.05 mit dem aktuelleren MinGW.

    Die Fehlermeldung sollte bei dir sehr ähnlich sein.

    MfG bcc-fan
  • OKey, wäre für Tipps dankbar :D
    Ich hab mal die Code von b, c und d rausgenommmen, weils sonst zu lang ist... sehen aber wie die von a aus ;)

    Quellcode

    1. #include <cstdlib>
    2. #include <iostream>
    3. #include <windows.h>
    4. #include <stdio.h>
    5. #include <conio.h>
    6. using namespace std;
    7. int main(int argc, char *argv[])
    8. {
    9. short x;
    10. char y;
    11. short cc, ccis, dd, ddis, ee, ff, ffis, gg, ggis, aa, aais, hh,
    12. c, cis, d, dis, e, f, fis, g, gis, a, ais, h, C, Cis, D, Dis, E, F, Fis, G, Gis, A, Ais, H;
    13. int Pause;
    14. cc=c/2; ccis=cis/2; dd=d/2; ddis=dis/2; ee=e/2; ff=f/2; ffis=fis/2; gg=g/2; ggis=gis/2; aa=a/2; aais=ais/2; hh=h/2;
    15. c=261; cis=277; d=293; dis=311; e=329; f=349; fis=369; g=391; gis=415; a=440; ais=466; h=493;
    16. C=c*2; Cis=cis*2; D=d*2; Dis=dis*2; E=e*2; F=f*2; Fis=fis*2; G=g*2; Gis=gis*2; A=a*2; Ais=ais*2; H=h*2;
    17. Pause=1;
    18. int zdtel, sztel, atel, vtel, hbe, gze; //normale Noten
    19. int psztel, patel, pvtel, phbe, pgze; //punktierte Noten
    20. int sztelP, atelP, vtelP, hbeP, gzeP; //Pausen
    21. int sonder1, sonder2, sonder3, sonder4; //Sonder
    22. zdtel=37*x; //normale
    23. sztel=75*x;
    24. atel=150*x;
    25. vtel=300*x;
    26. hbe=600*x;
    27. gze=1200*x; //normale
    28. psztel=112*x; //punktierte
    29. patel=225*x;
    30. pvtel=450*x;
    31. phbe=900*x;
    32. pgze=18000*x; //punktierte
    33. sztelP=75*x; //Pausen
    34. atelP=150*x;
    35. vtelP=300*x;
    36. hbeP=600*x;
    37. gzeP=1200*x;
    38. sonder1=375*x; //Sondernoten
    39. sonder2=300*x;
    40. sonder3=825*x;
    41. sonder4=750*x;
    42. cout << "Welches Lied wollen sie sich anhören?\n"
    43. << "<1> Stargate SG1 Intro\n"
    44. << "<2> Stargate Atlantis Intro\n"
    45. << "<3> Jack/Sam\n"
    46. << "<4> Banderlied\n"
    47. << "<5> Exit....\n";
    48. y=getch();
    49. if(y=='a'); //SG1-Intro
    50. {
    51. Beep(g,atel);
    52. Beep(D,phbe);
    53. Beep(G,vtel);
    54. Beep(F,sonder1);
    55. Beep(Dis,sztel);
    56. Beep(D,sztel);
    57. Beep(Dis,sztel);
    58. Beep(D,pvtel);
    59. Beep(D,atel);
    60. Beep(G,vtel);
    61. Beep(g,sztel);
    62. Beep(g,sztel);
    63. Beep(g,sztel);
    64. Beep(g,sztel);
    65. Beep(g,sztel);
    66. Beep(g,vtel);
    67. Beep(g,sztel);
    68. Beep(g,sztel);
    69. Beep(g,sztel);
    70. Beep(g,sztel);
    71. Beep(g,sztel);
    72. Beep(g,sztel);
    73. Beep(gis,atel);
    74. Beep(gis,atel);
    75. Beep(gis,atel);
    76. Beep(G,vtel);
    77. Beep(g,sztel);
    78. Beep(g,sztel);
    79. Beep(g,sztel);
    80. Beep(g,sztel);
    81. Beep(g,sztel);
    82. Beep(g,vtel);
    83. Beep(g,sztel);
    84. Beep(g,sztel);
    85. Beep(g,sztel);
    86. Beep(g,sztel);
    87. Beep(g,sztel);
    88. Beep(g,sztel);
    89. Beep(g,atel);
    90. Beep(Pause,sonder2);
    91. Beep(G,vtel);
    92. Beep(g,sztel);
    93. Beep(g,sztel);
    94. Beep(g,sztel);
    95. Beep(g,sztel);
    96. Beep(g,sztel);
    97. Beep(g,vtel);
    98. Beep(g,sztel);
    99. Beep(g,sztel);
    100. Beep(g,sztel);
    101. Beep(g,sztel);
    102. Beep(g,sztel);
    103. Beep(g,sztel);
    104. Beep(g,atel);
    105. Beep(gg,atel);
    106. Beep(d,atel);
    107. Beep(d,atel);
    108. Beep(h,pvtel);
    109. Beep(a,sztel);
    110. Beep(h,sztel);
    111. Beep(C,atel);
    112. Beep(a,atel);
    113. Beep(h,hbe);
    114. Beep(h,sztel);
    115. Beep(C,atel);
    116. Beep(a,atel);
    117. Beep(h,pvtel);
    118. Beep(h,sztel);
    119. Beep(C,atel);
    120. Beep(a,atel);
    121. Beep(h,atel);
    122. Beep(D,atel);
    123. Beep(C,atel);
    124. Beep(h,sztel);
    125. Beep(a,sztel);
    126. Beep(h,sonder4);
    127. Beep(a,atel);
    128. Beep(g,atel);
    129. Beep(dis,atel);
    130. Beep(g,vtel);
    131. Beep(E,pvtel);
    132. Beep(d,sztel);
    133. Beep(e,sztel);
    134. Beep(f,atel);
    135. Beep(d,atel);
    136. Beep(E,sonder3);
    137. Beep(E,sztel);
    138. Beep(F,atel);
    139. Beep(D,atel);
    140. Beep(E,patel);
    141. Beep(E,sztel);
    142. Beep(F,atel);
    143. Beep(D,atel);
    144. Beep(E,patel);
    145. Beep(E,sztel);
    146. Beep(F,atel);
    147. Beep(D,atel);
    148. Beep(E,atel);
    149. Beep(G,atel);
    150. Beep(F,atel);
    151. Beep(E,sztel);
    152. Beep(D,sztel);
    153. Beep(E,hbe);
    154. Beep(g,atel);
    155. Beep(gis,atel);
    156. Beep(C,atel);
    157. Beep(Cis,atel);
    158. Beep(C,sonder1);
    159. Beep(a,zdtel);
    160. Beep(ais,zdtel);
    161. Beep(h,atel);
    162. Beep(Gis,atel);
    163. Beep(Ais,atel);
    164. Beep(H,atel);
    165. Beep(Cis,atel);
    166. Beep(C,sonder1);
    167. Beep(a,zdtel);
    168. Beep(ais,zdtel);
    169. Beep(h,atel);
    170. Beep(Gis,atel);
    171. Beep(Ais,atel);
    172. Beep(H,atel);
    173. Beep(a,vtel);
    174. Beep(F,vtel);
    175. Beep(a,vtel);
    176. Beep(F,vtel);
    177. Beep(A,vtel);
    178. Beep(a,atel);
    179. Beep(a,atel);
    180. Beep(A,vtel);
    181. Beep(a,atel);
    182. Beep(a,atel);
    183. Beep(A,atel);
    184. Beep(a,sztel);
    185. Beep(a,sztel);
    186. Beep(A,sztel);
    187. Beep(A,sztel);
    188. Beep(A,sztel);
    189. Beep(A,gze);
    190. i=getch(); //frägt wieder ab, wohin als nächstes gesprungen werden soll
    191. }
    192. y=getch();
    193. }
    194. if(y=='b');
    195. {
    196. y=getch();
    197. }
    198. if(y=='c');
    199. {
    200. y=getch();
    201. }
    202. if(y=='d');
    203. {
    204. y=getch();
    205. }
    206. if(y='e');
    207. {
    208. return EXIT_SUCCESS;
    209. }
    210. }
    Alles anzeigen
  • Den Quelltext, wenn der solang ist wie deiner, sollte man möglichst in Funktionen unterteilen.

    So hier mal schon ein paar Anmerkungen:

    Quellcode

    1. #include <windows.h> // Es gibt Quellcode wo es auf die Reihenfolge der Header ankommt
    2. #include <iostream>
    3. #include <cstdlib>
    4. #include <cstdio> // geändert zu C++ Header
    5. #include <conio.h>
    6. using namespace std;
    7. int main(int argc, char *argv[])
    8. {
    9. short x;
    10. char y;
    11. ... // dein Quelltext
    12. if(y=='a'); //SG1-Intro <-- ich befürchte das du hier ein Zeichen falsch hast
    13. {
    14. Beep(g,atel);
    15. Beep(D,phbe);
    16. ...
    17. Beep(A,gze);
    18. i=getch(); //frägt wieder ab, wohin als nächstes gesprungen werden soll
    19. }
    20. y=getch();
    21. }
    22. if(y=='b'); // <-- ???
    23. {
    24. y=getch();
    25. }
    26. if(y=='c'); // <-- ???
    27. {
    28. y=getch();
    29. }
    30. if(y=='d'); // <-- ???
    31. {
    32. y=getch();
    33. }
    34. if(y='e'); // <-- ???
    35. {
    36. return EXIT_SUCCESS;
    37. }
    38. }
    Alles anzeigen


    Dann kann das mit dem Einrücken des Quelltextes noch verbessert werden ;)

    Sind dir

    Quellcode

    1. while
    2. // oder
    3. do ... while
    4. // sowie
    5. switch
    6. case

    schon bekannt?

    Das schon mal auf die Schnelle.

    MfG bcc-fam
  • oder wegen dem ; ;) :!:

    Überlege mal was passiert mit dem ; und was ohne?
    Probiere das mal aus an Beispielen, einmal, wenn if zutrifft und auch, wenn nicht :!:

    Zu dem while, das hast du das nur teilweise mit dem Gebrauch verstanden.
    Also alle if mit while ersetzen ohne den anderen Quelltext für while zu optimieren bringt dir wenig.

    Schnellgestricktes Gerüst:

    Quellcode

    1. y=getch(); // ein getch() hier
    2. while(y!='e')
    3. {
    4. if(y=='a')
    5. {
    6. beep....
    7. }
    8. if(y=='b')
    9. {
    10. be...
    11. }
    12. ...
    13. y=getch(); // und dann erst wieder hier, um bei deinem Beispiel zu bleiben.
    14. }
    Alles anzeigen

    Hoffe mal das ich das nicht zu schnell getippt hab ;)

    MfG bcc-fan
  • Ah, jetzt hab ichs kapiert :D

    in etwa dann so?

    Quellcode

    1. #include <windows.h>
    2. #include <iostream>
    3. #include <cstdlib>
    4. #include <cstdio>
    5. #include <conio.h>
    6. using namespace std;
    7. int main(int argc, char *argv[])
    8. {
    9. char y;
    10. y=getch();
    11. while(y!='e')
    12. {
    13. if(y=='a')
    14. {
    15. Beep(300,300);
    16. }
    17. if(y=='b')
    18. {
    19. Beep(300,100);
    20. }
    21. if(y=='c')
    22. {
    23. return 0;
    24. }
    25. }
    26. y=getch();
    27. }
    Alles anzeigen


    Wie kann ich dann machen, dass sich das nicht immer wiederholt?
    Und danke :D

    aber was bringt die while-schleife?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von JaffaCoder ()