2013-11-16 7 views
0

Я пытаюсь взять вход на 2 строки с помощью функции gets() (и я должен использовать эту функцию только)получает Function() не перестает воспринимать вводные

но когда я запускаю программу консоли просто продолжается во второй gets(), даже не останавливаясь, чтобы получить первый вход.

Когда я отлаживаю, я не вижу ввода ввода в строку cityName, ее просто проходит через нее.

Я также знаю, что есть проблема с буфером при обработке строк, есть ли способ «очистить» буфер, используя функции и gets()?

#include <stdio.h> 
#include <math.h> 
#include <string.h> 
void main() { 
    int z; 
    char cityName[50]; 
    char Coordinates[50]; 
    scanf("%d", &z); 
    printf("Please enter city name:\n"); 
    gets(cityName); 
    printf("Please enter city coordinates\n"); 
    gets(Coordinates); 
}  

ответ

1

В вызове scanf("%d", &z);, когда вы вводите целое, и нажмите кнопку ENTER, количество потребляется scanf, но новая линия все еще находится в буфере, в результате чего следующий gets() получить только ту новую линию ,

Решение, во-первых, избавиться от gets(), я не знаю, почему это единственная функция, которую вы должны использовать, это может привести к чрезмерному переполнению буфера, используйте fgets(), чтобы заменить его. Во-вторых, используйте что-то, чтобы потреблять новую строку, у вас есть несколько вариантов. Например, используйте один дополнительный вызов для fgets().

Кроме того, используйте int main(void), это неопределенное поведение для использования declare void main().

+0

Ive видел много вопросов об опасностях в получает() вещи, что это не мой призыв. Я должен использовать его и только его. – user3921

+1

@ user3921 Ну, скажите тому, кто принял решение, что вы должны использовать 'gets()' опасность этого. Кроме того, он уже удален из стандартной библиотеки C в новейшем стандарте (C11). –

+0

Я думаю, что мне удалось справиться с этим, я использую цикл while и использует getchar, пока не достигнут/n после каждого ввода. Кажется, он работает. Я знаю, что его глупое использование получает и ставит, но это мои инструкции, и я не хочу отказываться от класса из-за такого рода вещей. спасибо – user3921