2014-01-10 2 views
0

Я пытаюсь использовать получает, чтобы сохранить имя/маленькая фразаполучает прекращающий цикл на C

Предполагалось провести 39 символов, но после того, как я ввожу первый символ возвращается к предыдущему циклу , (У меня есть Do Пока показ контента на главной странице)

Почему он не работает так, как предполагается?

char nome[40]; 
printf("\nNome do Equipamento: "); 
gets(nome); 
strcpy(eq[n].nomeEquipamento, nome); 
+4

Чтобы сначала получить обязательный вариант: 'get' is _evil_. И даже не «здорова». Это зло в смысле «никогда, никогда не используйте его, независимо от обстоятельств». Это, по сути, уязвимость в безопасности ходьбы. Теперь, когда это не в порядке - пожалуйста, покажите нам остальную часть основной функции, ничего не могу сказать из этого. – Cubic

+0

Нет больше функции на языке C, называемой gets, она была удалена 2 года назад. – Lundin

+0

@Pedro Пожалуйста, разместите полный код. – Lundin

ответ

1

В ссылке, которую вы предоставили, есть scanf вызова до того gets

printf("\nCodigo do Equipamento: ");  
scanf("%d",&codigo);  
eq[n].codDipositivo=codigo; 
printf("\nNome do Equipamento: ");    
gets(nome); 

листьев scanf вызова за \n символа после нажатия Enter ключа. Этот символ \n читается gets, и именно поэтому вы столкнулись с этой проблемой.
Чтобы использовать это \n, используйте getchar starement сразу после scanf;

printf("\nCodigo do Equipamento: ");  
scanf("%d",&codigo); 
getchar();  // To comsume '\n'  
eq[n].codDipositivo=codigo; 
printf("\nNome do Equipamento: ");    
gets(nome); 

Актуальное описание gets; Happy to sat that the evil gets is the now now. Вместо этого используйте fgets.
А также не используйте strcpy, вместо этого вы можете использовать strncpy (перед его использованием внимательно прочитайте прошивку).

+0

большое вам спасибо! Я добавил fflush (stdin); перед scanf и fgets, и теперь это работает! – Pedro

+1

@Pedro; Не используйте 'fflush (stdin)'. Он вызывает ** неопределенное поведение **, если вы не находитесь на MS-DOS. – haccks

+1

Вы всегда должны указывать на недостатки в 'strncpy', прежде чем предлагать использовать его. В противном случае вы только переключаете одну уязвимость на другую. – user694733