2016-08-22 10 views
-4

Когда я запускаю этот код:fgets не хранить входящие в комплект поставки входов в переменных назначения

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

int main() 
{ 
    char name , age , gender , male; 

    printf("Please enter your name \n"); 

    fgets(name, 20 ,stdin); 

    printf("Please enter your age \n"); 

    fgets(age , 2 , stdin); 

    printf("Please enter your gender \n"); 

    fgets(gender , 7 , stdin); 

    atoi(age); 

    { 
     if (age < 50 && gender == male) 

      printf(" You're fit to play\n Welcome player ,%s \n",name); 

      else printf("Sorry , %s. You're not fit to play", name); 

    } 
    return 0; 
} 

я получаю этот выход:

please enter your name 
please enter your age 
please enter your gender 
you're fit to play 
welcome player, (null) 

И эти предупреждения я получаю от компилятора в моей CodeBlocks:

||=== Build: Release in justexploring1 (compiler: GNU GCC Compiler) ===| 
D:\Project\C language\justexploring1\main.c||In function `main':| 
D:\Project\C language\justexploring1\main.c|8|warning: passing arg 1 of `fgets' makes pointer from integer without a cast| 
D:\Project\C language\justexploring1\main.c|10|warning: passing arg 1 of `fgets' makes pointer from integer without a cast| 
D:\Project\C language\justexploring1\main.c|12|warning: passing arg 1 of `fgets' makes pointer from integer without a cast| 
D:\Project\C language\justexploring1\main.c|13|warning: passing arg 1 of `atoi' makes pointer from integer without a cast| 
D:\Project\C language\justexploring1\main.c|16|warning: format argument is not a pointer (arg 2)| 
D:\Project\C language\justexploring1\main.c|17|warning: format argument is not a pointer (arg 2)| 
D:\Project\C language\justexploring1\main.c|6|warning: 'name' might be used uninitialized in this function| 
D:\Project\C language\justexploring1\main.c|6|warning: 'age' might be used uninitialized in this function| 
D:\Project\C language\justexploring1\main.c|6|warning: 'gender' might be used uninitialized in this function| 
D:\Project\C language\justexploring1\main.c|6|warning: 'male' might be used uninitialized in this function| 
||=== Build finished: 0 error(s), 10 warning(s) (0 minute(s), 0 second(s)) ===| 

Он полностью игнорирует fgets и не запрашивает для любого входа. всегда обрабатывает утверждение как истину. и всегда использует (null) для name.

Не могли бы вы рассказать мне, что случилось с моим кодом? Мне когда-то говорили использовать fgets вместо scanf и gets. стоит упомянуть, что scanf также дал мне подобные проблемы.

+4

Сделайте себе одолжение: ** включите все предупреждения компилятора и учтите их **. – pmg

+0

Я только что добавил предупреждения компилятора к вопросу. Их довольно много. –

+0

strcmp? Я не знаю эту функцию. Можете ли вы показать мне, как он используется? –

ответ

2

В коде name, age, gender, male все char переменные, а не char массива. Вам понадобится массив для достижения таргетинга. Ваши массивы должны быть того же размера, что и у вас, до fgets().

Это говорит,

  • atoi() не преобразует саму введённому в int, он возвращает преобразованное значение. Вы должны сохранить это в переменной.
  • maleявляется переменной, не строки символов, поэтому имя переменного не может быть использовано в качестве значениядля сравнения. Вы можете определить переменную, содержащую строковый литерал, const char * match = "male"; или непосредственно использовать строковый литерал ("male") для сравнения.
  • Для сравнения строк вам нужно использовать strcmp().
+0

Итак, как мне преобразовать значение в целое? Или как мне запросить целое число? –

+0

@AllanMayers Вы можете сохранить возвращаемое значение 'atoi()' в переменную 'int', если хотите. –

+0

@AllanMayers Вот [demo] (http://ideone.com/RKL2VT), который должен работать на вас. Я не думаю, что это право на дискриминацию в отношении пола, но против людей, которым не нравятся блины ... определенно :-) (взгляните на демо, если вы не понимаете, что я имел в виду)! Однако было бы легко изменить назад. Надеюсь, это поможет! – iRove

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

  • Нет связанных вопросов^_^