Ich habe ein Programm für ein seltsames Würfelspiel geschrieben, das im IF-ELSE-Teil vermutlich fehlerhafte Bedingungen hat. Ich füge ein Arbeitscode-Snippet ein, das das Problem repliziert.Was ist los mit den Bedingungen in diesem IF-ELSE?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int rollTotal = 11;
int rollTotal2 = 10;
char userGuess[5] = "l";
if ((userGuess == "h" && rollTotal2 > rollTotal) || (userGuess == "e" && rollTotal2 == rollTotal) || (userGuess == "l" && rollTotal2 < rollTotal))
{
printf("You win :D \n");
}
else
{
printf("You lose D: \n");
}
return 0;
}
Erwartete Ausgabe: "Sie gewinnen: D" | Tatsächliche Ausgabe: "Sie verlieren D:"
Ich dachte, es war ein Problem mit den Bedingungen. Also änderte ich die Bedingungen zu (userGuess == 'h' && rollTotal2 > rollTotal)
und so weiter (ich änderte die doppelten Anführungszeichen in ein einzelnes Anführungszeichen). Das gab mir die gleiche Ausgabe zusammen mit warning: comparison between pointer and integer
. Dies führte mich zu einem verwirrenden SO Q&A, aus dem ich nichts machen konnte, weil ich diese Funktionen nicht kannte.
Das führte mich zu dem aktuellen Zustand meines Programms, das oben eingefügt ist (ich kehrte zurück zu doppelten Anführungszeichen). Ich glaube weiterhin, dass die Bedingungen der IF-ELSE fehlerhaft sind. Es gibt mir immer noch die gleiche Buggy-Ausgabe zusammen mit Warning: comparison with string literals results in unspecified behaviour
. Dies führte mich zu einem weiteren fruitless endeavor.
Dieser Fehler liegt wahrscheinlich an meinem Mangel an Wissen über Zeiger und dergleichen und ist höchstwahrscheinlich extrem dumm. Bitte helfen Sie mir hier draußen.
Einige Informationen, die
IDE Hilfe- kann: Code :: Blocks
Compiler GCC
OS: Linux
Da sie * einzelne * Zeichen sind - warum schlagen Sie nicht vor, ** einfache Anführungszeichen ** zu verwenden, damit der Vergleich wie geschrieben gültig ist? (z. B. machen Sie es einen Zeichenvergleich anstelle eines String-Vergleich) –
@ DavidC.Rankin ja, das ist der faire Punkt – artm
Das ist eine faire Bearbeitung. Vergiss nicht 'char userGuess = '1';' um sicherzustellen, dass 'userGuess' auch ein Zeichen sein muss (andernfalls, nenne 'userGuess' nur für den Vergleich, zB '* userGuess == 'h'', etc .. zum Vergleich des ersten Zeichens. ':)' –