2015-01-22 2 views
0

Эй, ребята, я учился, и я начал программировать игру Hangman. Это должно быть сыграно более одного слова, и я выбрал «informatik».Основные проблемы с C-часовым

Что я хочу сделать, это попросить имя пользователя, а затем начать.

#include<stdio.h>    
int main() { 
int correct = 0; 
int mistake = 0; 
int number = 0; 
char name[20]; 
char Word[]={'i','n','f','o','r','m','a','t','i','k'}; 
char guessStatus[]={'_','_','_','_','_','_','_','_','_','_','\0'}; 
char guess; 
printf("##### Welcome to Hangman #####\nWhat is your Name?\n"); 
scanf(" %s", name); 
fflush(stdin); 
printf("Hello %s!\n", name);                    
    while (mistake <=10 && number<10) { 
    printf("Guess a letter: "); 
    guess = getchar(); 
    printf("%c", guess); 
    correct = 0; 
    for (int search=0; search<10; search++) 
    {             


     if (guess == Word[search]){ 
      number++; 
      guessStatus[search] = Word[search]; 
      correct = 1; 
     } 
    } 
    if (correct == 0){ 
     mistake++; 
     printf("%c is wrong!\nYour Status is: %s\nYou have %i tries left\n", guess,guessStatus,10-mistake); 
    } 
     else { 
      printf("Good job %s!\nYour Status is: %s\nYou have %i tries left\n", name,guessStatus,10-mistake); 
     } 

} 

}

Проблема заключается в том, когда я запускаю код и ввести любую букву, программа рассчитывает «войти», также как letter.I используется fflush (STDIN) в надежде, даже я ничего не знаю об этом, но не сработало :) Проблема выхода как:

Добро пожаловать в Hangman

Как вас зовут? john Здравствуйте, john! Угадайте письмо:

неправ! Ваш статус: __________ У вас осталось 9 попыток Угадай письмо: i iGood job john! Ваш статус: i_______i_ У вас есть 9 попыток осталось Угадай письмо:

это неправильно! Ваш статус: i_______i_ У вас осталось 8 попыток

Я не знаю, как с этим бороться. Помочь будет очень благодарен.

+1

Что означает «это [..] не работает» означает? Он рухнул? Вы получили сообщение об ошибке? Какая ошибка? – TobiMcNamobi

+0

'fflush (stdin)' is undeined поведение –

+0

Если вы не хотите, чтобы «вводить» считалось буквой, добавьте 'if (guess == '\ n') continue;' или что-то в этом роде. Но было бы лучше проверить буквы: 'if (guess <'a' || guess> 'z')', но детали будут отличаться в зависимости от вашего языка и словаря. – rodrigo

ответ

0

Добавить в gethcar(); будет нормально читать \ n:

#include <stdio.h>    
int main() { 
int correct = 0; 
int mistake = 0; 
int number = 0; 
char name[20]; 
char Word[]={'i','n','f','o','r','m','a','t','i','k'}; 
char guessStatus[]={'_','_','_','_','_','_','_','_','_','_','\0'}; 
char guess; 
printf("##### Welcome to Hangman #####\nWhat is your Name?\n"); 
scanf(" %s", name); 
getchar(); // add this line 
printf("Hello %s!\n", name);                    
    while (mistake <=10 && number<10) { 
    printf("Guess a letter: "); 
    guess = getchar(); 
    printf("%c", guess); 
    correct = 0; 
    for (int search=0; search<10; search++) 
    {             


     if (guess == Word[search]){ 
      number++; 
      guessStatus[search] = Word[search]; 
      correct = 1; 
     } 
    } 
    if (correct == 0){ 
     mistake++; 
     printf("%c is wrong!\nYour Status is: %s\nYou have %i tries left\n", guess,guessStatus,10-mistake); 
    } 
     else { 
      printf("Good job %s!\nYour Status is: %s\nYou have %i tries left\n", name,guessStatus,10-mistake); 
     } 
} 
} 
+0

да работает :), и я должен также поставить его в выражение while (между guess = getchar() и printf («% c», угадать); но почему? не должен ли пользователь вводить свое слово с помощью клавиши «enter»? – Asil

+0

Googel «scanf line buffer» будет знать. –

0

попробовать это, он должен работать
Использование

scanf(" %c",&guess); 

вместо

guess = getchar(); //remove this line 
printf("%c", guess); //remove this line also 
Смежные вопросы