2014-10-09 8 views
-4

Я действительно не знаю, что я делаю неправильно с этим. Каждый раз, когда я его компилирую, на четвертом входе пользователя он просто останавливается и показывает «обработанные процессы».Что я делаю неправильно? (C)

#include <stdio.h> 
#include <conio.h> 

int main() { 

char firstname[15], class, swordch0c1, swordch0c2; 
int health, healthtot, armor, armortot; 

printf("Hello there! Could I have your first name?\n>"); 
scanf("%s", firstname); 

printf("\n---------------------The Legend of %s---------------------", firstname); 
printf("\nPress Enter to continue."); 
getch(); 

printf("\n\n\nYou are %s, a(n): \nA.Swordsman\nB.Assassin\nC.Archer\nD.Mage\n>", firstname); 
scanf(" %c", &class); 

/*swordsman story starts here*/ 
if (class=='a' || class=='A') 
    { 
    printf("\n\nThere you stand, at your boring everyday post.\nWhen you joined the army, you thought it would be more exciting than this.\nJust then, you see your general walking towards you."); 
    printf("\n\nYou quickly improve your posture. \"Soldier, I have an opportunity for you\"\nA.\"Really? What is it?\"\nB.\"I'm not interested\"\n>"); 
    scanf(" %c", &swordch0c1); 

    if (swordch0c1=='b'||swordch0c1=='B') 
     { 
     printf("\n\"But... I didn't even tell you what it was. Okay, suit yourself\" You are DOOMED to a life of boredom.\n\n\n\n\n"); 
     } 

    if (swordch0c1=='a'||swordch0c1=='A') 
     { 
     printf("\n\n\n\"Well, you see, there's this dragon. He's been causing big problems.\nHe's destroyed villages, harrassed the priests on the mountain,\n"); 

... редактировать: Это позволяет мне поставить в четвертый вход. после попадания в него он показывает процессы, возвращаемые материалом.

+0

Вы можете ввести четвертый ввод или просто пропустить его? –

+0

Вам нужно будет показать весь код (или, по крайней мере, до точки «четвертого ввода пользователя»). – jwodder

+0

@jwodder, то есть код до четвертого ввода. – Jeremy

ответ

0

Эта линия почти определенно проблема:

scanf(" %c", &swordch0c1); 

Вы просите, чтобы читать один символ, однако на самом деле ввести символ, который вы должны ввести два символа: Введите. Этот вызов scanf будет читать 'A', а следующий вызов scanf будет читать '\n' (ключ Enter), который все еще находится во входном буфере.

Я предлагаю использовать fgets() для всех пользователей. С этим намного легче справиться, поскольку он соответствует тому, как пользователи фактически вводят ввод (строка текста плюс Введите).

+0

Большое спасибо. У вас есть идея о том, почему пользователь вводил данные до того, как он работал с этим форматом? – Jeremy

+0

Пространство спереди (''% c "') приведет к тому, что 'scanf' будет пропускать пробелы во входном буфере (клавиша Enter - это пробел). Вы не указали свой четвертый пользовательский ввод, поэтому я не уверен, что он говорит. –

Смежные вопросы