2015-06-06 3 views
1

Итак, я пытаюсь сделать этот код, который говорит «Hello Mr» или «Hello Mrs» в зависимости от пола пользователя, но когда я запускаю программу, «Позвольте мне набрать мое имя, но почему?Код с gets() и printf не работает

Кроме того, я пытался использовать fgets(), но компилятор говорит « слишком мало аргументов для функции„fgets“»

#include <string.h> 
#include <math.h> 
#include <ctype.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
void flushstdin() 
{ 
    int c; 
    while((c=getchar())!= '\n' && c != EOF); 
} 

int main() { 
    float sex; 
    char name[60]; 
    printf("\nInform your sex: 1 if you are male, 2 if you are female."); 
     while(scanf("%f",&sex)!=1 || sex!=1 && sex!=2){ //In case the person typed something different of 1,2. 
      printf("\nInform a correct value, 1 or 2.\n"); 
      flushstdin(); 
     }if(sex==1){ 
       printf("Inform your name.\n"); 
       gets(name); 
       printf("\nHello Mr. %s \n",name); 
      } 
     if(sex==2){ 
       printf("Inform your name.\n"); 
       gets(name); 
       printf("\nHello Mrs. %s \n",name); 
     } 
    system("pause"); 
    return 1; 
    } 
+0

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

ответ

2

В этом случае при нажатии кнопки ВВОД, чтобы передать данные от того, пользователь является женским или мужским, символ для ввода, который является «\ n», все еще находится в очереди во входном буфере. Это происходит при использовании scanf. Это означает, что следующая функция gets() будет читать символ «\ n», который все еще находится в буфере, не спрашивая пользователя в первую очередь.

Простое решение было бы добавить две строки кода после запроса пол пользователя, который будет получать оставшиеся вход (ы) в буфере:

#include <string.h> 
    #include <math.h> 
    #include <ctype.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <conio.h> 

    void flushstdin() { 
     int c; 
     while((c=getchar())!= '\n' && c != EOF); 
    } 

    int main() { 
     float sex; 
     char name[60]; 
     printf("\nInform your sex: 1 if you are male, 2 if you are female."); 
     while(scanf("%f",&sex)!=1 || sex!=1 && sex!=2){ //In case the person typed something different of 1,2. 
      printf("\nInform a correct value, 1 or 2.\n"); 
      flushstdin(); 
     } 

     //new code, extracts input from buffer until it reads a '\n' character or buffer is empty 

     char c; 
     while((c = getchar()) != '\n' && c != EOF); 

     //end of new code 

     if(sex==1){ 
      printf("Inform your name.\n"); 
      gets(name); 
      printf("\nHello Mr. %s \n",name); 
     } 
     if(sex==2){ 
      printf("Inform your name.\n"); 
      gets(name); 
      printf("\nHello Mrs. %s \n",name); 
     } 

     system("pause"); 
     return 1; 
    } 
Смежные вопросы