2015-11-01 2 views
3

В принципе я начинающий верстальщик и это то, что я писал:C код аварии (не знаю, почему)

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
system("COLOR 0A"); 

char playerName[13]; 
char playerGender; 
int playerAge; 

printf("Please input your name and age!\nName: "); 
scanf("%s", playerName); 
printf("Age (from 18 to 50): "); 
scanf("%d", &playerAge); 

label: 
if(playerAge > 18 && playerAge < 50) 
{ 

    printf("What gender are you, M(male) or F(female): "); 
    scanf("%c", playerGender); 

    gender: 
    if(playerGender == 'M' || playerGender == 'F'){ 

     printf("Okay, so your name is %s, you're %d years old and you're a %s.", playerName, playerAge, playerGender); 
    }else{ 
     printf("Try again.\n\n" 
      "What gender are you, M(male) or F(female): "); 
      scanf("%c", playerGender); 
      goto gender; 
    } 
}else{ 

     printf("Wrong, try again.\n" 
       "Age (from 18 to 50): "); 
     scanf("%d", &playerAge); 
     goto label; 
} 


return 0; 
} 

Когда я кладу требуемого возраста, чтобы продолжать, он выходит из строя на scanf для playerGender. Сразу после того, как он показывает мне вопрос о моем полу? Где моя ошибка?

+0

Основная проблема заключается в использовании 'scanf' для ввода пользователем. – melpomene

+3

Несмотря на то, что вы новичок, у вас должен быть здравый смысл включать вашу полную программу и описание ее поведения. Это очень хорошо! –

+0

Научитесь не использовать goto с самого начала. – Unimportant

ответ

10

попробовать:

scanf("%c", &playerGender); 

вместо

scanf("%c", playerGender); 

, как зсапЕ принимает указатель и не ссылку на переменную, которую вы пытаетесь заполнить.

0

Я тоже новичок, но я думаю, что вам нужно, чтобы написать этот scanf("%s", playerName); как этот scanf("%12s", playerName);

BTW, дайте мне знать, если это работает.

+0

Это явно указывает 'scanf', что строка, которая должна быть взята, состоит из 12 символов. Он предотвращает переполнение буфера, если пользователь вводит длину массива, который он хранит, и составляет 12 байтов. – Malina

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