某些语句打印两次
问题描述:
在我正在写的一个hang子手程序中,当用户第一次输入“e”,然后尝试输入“鳗鱼”或“蜜蜂”时, e“作为第二个提示,将显示”你已经猜到了这封信“两次。我怎样才能解决这个问题?某些语句打印两次
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
int main(){
char w[13][3] = {
{ 'c', 'a', 't' }, //0
{ 'd', 'o', 'g' }, //1
{ 'r', 'a', 't' }, //2
{ 'e', 'e', 'l' }, //3
{ 'c', 'o', 'w' }, //4
{ 'o', 'w', 'l' }, //5
{ 'e', 'm', 'u' }, //6
{ 'b', 'a', 't' }, //7
{ 'e', 'l', 'k' }, //8
{ 'p', 'i', 'g' }, //9
{ 'b', 'e', 'e' }, //10
{ 'h', 'e', 'n' }, //11
{ 'f', 'o', 'x' }, //12
};
char u,
newline,
dis[16];
int random,
guesses = 3,
finish = 0;
_Bool successfulGuess = false;
srand(time(NULL));
random = rand() % 13;
printf("Animal %d\n", random); //check random number
printf("---------\n\n");
printf("Enter a letter: ");
u = getchar();
newline = getchar();
for (int i = 0; i < 3; i++){
if (w[random][i] == u){
successfulGuess = true;
dis[i] = u;
}
else {
dis[i] = '_';
}
}
for (int j = 0; j < 3; j++){
dis[j] = dis[j];
}
printf("\n");
for (int i = 0; i < 3; i++){
printf("%c", dis[i]);
}
if (successfulGuess == false){
--guesses;
}
printf("\n\nGuesses left: %d", guesses);
printf("\n\n");
while (guesses > 0){
finish = 0;
successfulGuess = false;
printf("Enter a letter: ");
u = getchar();
newline = getchar();
for (int i = 0; i < 3; i++){
if (u == dis[i]){
successfulGuess = true;
printf("\nYou already guessed this letter.\n");
printf("\ninput = dis[i]\nGuesses left: %d\n\n", guesses);
}
else if (w[random][i] == u){
successfulGuess = true;
dis[i] = u;
printf("\ninput = array char\nGuesses left: %d\n\n", guesses);
}
}
for (int i = 0; i < 3; i++){
printf("%c", dis[i]);
}
if (successfulGuess == false){
guesses--;
printf("\n\nbool statement\nGuesses left: %d\n\n", guesses);
}
if (guesses == 0){
printf("Sorry, you've run out of guesses.");
}
for (int i = 0; i < 3; i++) {
if (dis[i] != '_') {
finish++;
}
if (finish == 3){
printf("\n\nYou guessed the word!");
guesses = 0;
}
else{
continue;
}
}
printf("\n\n");
}
system("pause");
}
答
即使您已经显示消息,您仍在循环三次。我认为它应该打破这个消息:
for (int i = 0; i < 3; i++){
if (u == dis[i]){
successfulGuess = true;
printf("\nYou already guessed this letter.\n");
printf("\ninput = dis[i]\nGuesses left: %d\n\n", guesses);
/* BREAK HERE */
break;
}
+0
这个工作就像一个魅力。 – Novaea 2014-10-03 06:09:18
为什么你有'for(int j = 0; j 2014-10-03 05:58:29
'for(int j = 0; j AnT 2014-10-03 05:58:50
请阅读[“最小,完整,可验证,示例”中的“最小”](http://stackoverflow.com/help/mcve)。为什么我们需要看到所有“工作”可能性的数组?如果您的随机选择正在工作,请将其解决并硬编码问题案例。简而言之:不要发布*“这是我的所有代码,找到我的错误”*,而是*“我已经将我的代码削减到了显示问题的最重要版本的程序”*。这将集中您的问题,并且您可能在过程中发现自己的错误... – HostileFork 2014-10-03 06:02:09