2017-01-24 9 views
-1

Программа не будет компилировать fgets в функции teste1. Или, по крайней мере, он не работает должным образом, он не позволит мне ввести строку, программа закончится сразу после того, как она напечатает «Nome do cliente».fgets будет проигнорирован, вероятно, из-за других scanf's

Если я отключу другую функцию scanf, она будет работать без каких-либо проблем.

Как заставить fgets работать?

#include <stdio.h> 
void teste1(){ 
    char teste[50]; 
    printf("Nome do cliente\n"); 
    fgets(teste,50,stdin); 
} 

void teste2(){ 
    teste1(); 
} 

void teste3(){ 

     int opc1,opc2; 
     printf("\nSeleccione a área desejada\n1- Clientes\n2- Concessionários\n3- Carros de demonstração\n"); 
     scanf("%d",&opc1); 

     printf("\nSeleccione a área desejada\n1- Inserir\n2- Alterar\n3- Remover\n4- Consultar\n");  
     scanf("%d",&opc2); 

    teste2(); 
} 

int main() 
{ 
    teste3(); 
} 
+1

Итак ... в чем вопрос? –

+0

Как мне заставить fgets работать? – xickoh

+1

Вы должны быть крайне осторожны в том, чтобы утверждать, что компилятор плохо себя ведет - это, безусловно, не проблема; ваш код делает ложное предположение о том, как 'scanf()' читает целые числа. –

ответ

1

Введите ключ вы нажали последний scanf вход будет оставлен во входном буфере в качестве символа новой строки. Функция fgets будет читать эту новую строку и считать, что она закончена.

+0

Как это исправить? – xickoh

+3

@xickoh: Несколько вариантов. Один из них - использовать 'fgets()' для чтения строк, а затем 'sscanf()' для их анализа - это, наверное, лучший. Альтернативой является сжигать символы до новой строки (или EOF) после 'scanf()', используя код типа: 'int c; while ((c = getchar())! = EOF && c! = '\ n'); '. Обратите внимание, что в этом вопросе пользователь может ввести '3 4 Frederick Handel' все на одной строке, и это удовлетворит весь ваш код ввода. С 'fgets()' plus 'sscanf()', вы получаете контроль над тем, что вводит пользователь (или что вы делаете с тем, что вводит пользователь). –

+0

@ Джонатан Леффлер делает fgets() целые числа? Я только намерен прочитать одно целое в этом scanf – xickoh