char in einer if Anweisung?

regex9  01.06.2020, 13:17

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.

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.


HAMAELEHRO 
Fragesteller
 01.06.2020, 13:18

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.

0
jort93  01.06.2020, 13:24
@HAMAELEHRO

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'

0
HAMAELEHRO 
Fragesteller
 01.06.2020, 13:27
@jort93

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

0
HAMAELEHRO 
Fragesteller
 01.06.2020, 13:29
@HAMAELEHRO

Genau genommen steht dann als Fehler:

"Fehlendes Ganzzahlargument für "scanf_s" das dem Konvertierungsspezifier "2" entspricht.

Was hat das zu bedeuten ?

0
jort93  01.06.2020, 13:31
@HAMAELEHRO

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;
			}
		}
	}
}
0
HAMAELEHRO 
Fragesteller
 01.06.2020, 13:34
@jort93

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?

0
jort93  01.06.2020, 13:39
@HAMAELEHRO

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.

1
jort93  01.06.2020, 13:42
@HAMAELEHRO

Aber, wie gesagt, du lernst mehr wenn du selbst ein programm schreibst.

0
HAMAELEHRO 
Fragesteller
 01.06.2020, 13:46
@jort93

:O Derartige Dinge haben wir noch nicht in der VL gehabt. Vielen Dank :) Siper Hilfe

0

Du musst k schon als string schreiben. Also "k" und nicht k was bei dir ein int mit dem Wert 1 ist.

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

HAMAELEHRO 
Fragesteller
 01.06.2020, 13:19

Als string? also 'k' oder "k"?

Und weißt du zufällig wieso es nur mit "==" funktioniert, und nicht mit einem einfachen "=" ?

0
whgoffline  01.06.2020, 13:21
@HAMAELEHRO

Kannst du mal deinen code z.b auf hastebin hochladen und mir hier einen Link als Kommentar schicken?

0
HAMAELEHRO 
Fragesteller
 01.06.2020, 13:21

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;

}

  }

}

}

0
jort93  01.06.2020, 13:28
@HAMAELEHRO

Jetzt hast du den code ja auch völig falsch geändert.

eingabe = "k" ist ja eine zuweisung und kein vergleich.

0