char in einer if Anweisung?
Hallo. Das Programm führt die Lösung wie gewollt aus, wenn ich bei der eingabe "1" eingebe. Wenn ich jedoch, wie es eigentlich vorgesehen ist, k (für korrekt) eingebe, führt er mir sinnfrei alles aus. Wie kann ich das Problem umgehen, wie erkennt er das "k" richtig? Vielen Dank.
Bitte auch darum, wie kann ich ein Programm kopieren, damit ihr den Code direkt bearbeiren lönnt?
Kopiere deinen formatierten Code in das Textfeld von pastebin.com, setze ein Syntax Highlighting, drücke auf "Create New Paste" und kopiere die URL aus der Adresszeile hier hinein.
Vielen Dank.
2 Antworten
Vorgesehen ist dass du eine zahl eingibst, und 1 ist dann korrekt.
k hat ja den wert 1. Also jedes mal wenn du in deinen code k schreibst, meinst du damit 1.
"k" als eingabe sollte falsch sein.
Ich habe übrigens keine ahnung was h und n machen sollen.
Na dann musst du char's einlesen. Also oben
char eingabe;
...
scanf(" %c", &eingabe);
Und unten
if(eingabe == 'k') {
...
Alternativ änderst du den wert von k, von 1 auf 'k'
Wenn ich das so mache, ignoriert er leider alles..
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int minimum = 1, maximum = 1000;
int geratenerwert = (minimum + maximum) / 2;
int i;
int eingabe;
int k;
int h, n;
printf("Das Spiel beginnt - denken Sie sich eine Zahl aus!\n\n");
for (i = 1; i < 12; i++) {
printf("%d. Versuch:\n", i);
printf("-------------\n");
printf("Ist die ausgedachte Zahl : %d?\n\n", geratenerwert);
scanf_s("%c", &eingabe);
if (eingabe == 'k') {
printf("Spielende!\n");
break;
}
if (eingabe != 'k') {
if (eingabe == 'h') {
minimum = minimum + geratenerwert;
geratenerwert = (geratenerwert + maximum)/2;
continue;
}
if (eingabe == 'n') {
maximum = maximum - geratenerwert;
geratenerwert = (geratenerwert + minimum) / 2;
continue;
}
}
}
}
Bitte um Verständnis, da ich Anfängerin bin :)
Genau genommen steht dann als Fehler:
"Fehlendes Ganzzahlargument für "scanf_s" das dem Konvertierungsspezifier "2" entspricht.
Was hat das zu bedeuten ?
Du kannst nicht einfach irgendwas ändern ohne es zu verstehen. Ich würde ein programm von anfang schrieben, dann verstehest du es auch.
Du musst auch oben
int eingabe;
Zu
char eingabe;
ändern da du jetzt einen char erwartest.
Wenn du das tust, dann erkennt er schonmal wenn du richtig oder falsch liegst.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int minimum = 1, maximum = 1000;
int geratenerwert = (minimum + maximum) / 2;
int i;
char eingabe;
int k;
int h, n;
printf("Das Spiel beginnt - denken Sie sich eine Zahl aus!\n\n");
for (i = 1; i < 12; i++)
{
printf("%d. Versuch:\n", i);
printf("-------------\n");
printf("Ist die ausgedachte Zahl : %d?\n\n", geratenerwert);
scanf("%c", &eingabe);
if (eingabe == 'k')
{
printf("Spielende!\n");
break;
}
if (eingabe != 'k')
{
if (eingabe == 'h')
{
minimum = minimum + geratenerwert;
geratenerwert = (geratenerwert + maximum) / 2;
continue;
}
if (eingabe == 'n')
{
maximum = maximum - geratenerwert;
geratenerwert = (geratenerwert + minimum) / 2;
continue;
}
}
}
}
Danke, jetzt hat es funktioniert. Kannst du evtl. auch das Mysterium lösen, weshalb er mir jetzt bei h und n 2 Schleifenvorgänge auf einen Schlag ausgibt?
Weil da das leerzeichen fehlt, welches du auch vergessen hast.
Wie gesagt, da muss
char eingabe;
...
scanf(" %c", &eingabe);
stehen. Mit dem leerzeichen, genau so.
Sonst erkennt der whitespace davor auch als char. Mit dem leerzeichen nimmt er das erste druckbare zeichen.
Aber, wie gesagt, du lernst mehr wenn du selbst ein programm schreibst.
:O Derartige Dinge haben wir noch nicht in der VL gehabt. Vielen Dank :) Siper Hilfe
Du musst k schon als string schreiben. Also "k" und nicht k was bei dir ein int mit dem Wert 1 ist.
Als string? also 'k' oder "k"?
Und weißt du zufällig wieso es nur mit "==" funktioniert, und nicht mit einem einfachen "=" ?
Kannst du mal deinen code z.b auf hastebin hochladen und mir hier einen Link als Kommentar schicken?
Das Problem hierbei ist nun, dass er immer nur "Spielende" ausgibt..
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int minimum = 1, maximum = 1000;
int geratenerwert = (minimum + maximum) / 2;
int i;
int eingabe;
int k = 1;
int h=2, n = 0;
printf("Das Spiel beginnt - denken Sie sich eine Zahl aus!\n\n");
for (i = 1; i < 12; i++) {
printf("%d. Versuch:\n", i);
printf("-------------\n");
printf("Ist die ausgedachte Zahl : %d?\n\n", geratenerwert);
scanf_s("%d", &eingabe);
if (eingabe = "k") {
printf("Spielende!\n");
break;
}
if (eingabe != "k") {
if (eingabe = "h") {
minimum = minimum + geratenerwert;
geratenerwert = (geratenerwert + maximum)/2;
continue;
}
if (eingabe = "n") {
maximum = maximum - geratenerwert;
geratenerwert = (geratenerwert + minimum) / 2;
continue;
}
}
}
}
Jetzt hast du den code ja auch völig falsch geändert.
eingabe = "k" ist ja eine zuweisung und kein vergleich.
Wie kann ich es nun umprogrammieren, sodass das Programm mit der Eingabe des Buchstabens "k" weiterrechnen kann?
h und n sollen für höher und niedriger stehen.Dabei habe ich es eben geändert und h =2 und n = 0 gesetzt.
Also zu der ursprünglichen Frage, wie kann ich für alle den Buchstaben einlesen lassen?Vielen Dank.