2016-10-22 2 views
0

Это моя первая попытка, но это не сработало.Ошибка дескриптора для 2 поплавков, разделенных пробелами в одной строке

Он идет в INF цикла, если я ввожу неверное значение входного сигнала намеренно, например: Asdas dfsad afdas

float a,b ; 
while (1){ 
    if(scanf("%f %f",&a,&b) == 2) { 
     break; 
    } 
    printf("Error, try again:"); 
} 
+1

Поскольку 'scanf()' et al. Не заботятся о строках, это неправильные функции для использования, если вы заботитесь о строках. Прочитайте ввод с помощью функции чтения строки (['fgets()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html) или ['getline()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)), а затем проанализируйте строку с помощью 'sscanf()'. Он не заботится о новостях, но вы знаете, что у него есть только одна линия, чтобы играть. Кроме того, если первый синтаксический анализ завершился неудачей, вы можете переписать строку; вы также можете сообщить полную строку в сообщениях об ошибках, что упростит отладку. –

ответ

3

Лучший способ избежать такого рода проблемы заключается в использовании fgets() читать всю строку в то время, , затем проанализируйте его, используя sscanf() (или в вашем случае, возможно, strtod()). Это позволит не только избежать конкретной проблемы, которая у вас есть сейчас, но и избежать других проблем, когда формат ввода не соответствует ожиданиям.