Когда я запускаю этот код: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
также дал мне подобные проблемы.
Сделайте себе одолжение: ** включите все предупреждения компилятора и учтите их **. – pmg
Я только что добавил предупреждения компилятора к вопросу. Их довольно много. –
strcmp? Я не знаю эту функцию. Можете ли вы показать мне, как он используется? –