Показать сообщение отдельно

Доброго времени суток!
  #4  
Старый 22.03.2009, 22:08
VIP
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
С нами: 11243422

Репутация: 21
По умолчанию Доброго времени суток!

Однажды я спрашивал здесь по поводу "защиты от дураков" в С, мне ответили, что там её нет как таковой. Но лабораторные мне писАть надо, так что пока у нас вводятся только числа я попробовал, сделать вот такую проверку:

Код:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define MAXLINE 1000

double protect_double(char str[]){ // функция "защита от дураков"
  int i; // переменная-счётчик
  double digit; // возвращаемое значение
  char str_2[MAXLINE]; // временная строка
  for(i=0; i<strlen(str); i++){ // цикл проверки каждого введённого символа
    if ((str[i]>='0'&&str[i]<='9')||(str[i]=='.')){ // определение принадлежности символа к числу или .
      str_2[i]=str[i]; // если это число, то записываем в переменную строку
      }
    else { // если это не число, то выдаём сообщение об ошибке
      printf("Вы ввели некорректные данные! Пожалуйста введите число."); // сообщение
      break; // прерываем выполнение функции
      }
    }
  if(i==strlen(str)){ // если все введённые символы - числа, то преобразуем строку в число
   digit=atof(str_2); // преобразуем...
   }
  return digit; // возвращаем число
}

int main(void){ 
  char s[MAXLINE]; // объявление вводимой строки
  double a; // строка как число
  printf("Введите пожалуйста число: \n"); // сообщение о вводе числа (на самом деле строки)
  scanf("%s", &s); // сканируем вводимую строку
  a=protect_double(s); // отправляем строку на проверку
  printf("%f+1=%f\n", a, a+1); // выводим результат сложения, чтобы убедиться, что получили число
  return 0; // завершение программы
}
всё бы ничего, но вот возникла проблема, которую я не знаю как решить:

функция protect_double должна возвращать занчение типа double, но какое значение она должна возвращать, если она завершилась, но не преобразовала строку (т.е. ввели не число)?

Как я понимаю, нужно в ней вместо break написать return <что-то>, что означало бы, что в строке не число, но ведь это <что-то> должно быть double. а как тогда в main отличить double, который с ошибкой от double, который ввели?
 
Ответить с цитированием