Проверка строки на вещественное число - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Все готово, теперь нужно куда-нибудь запихнуть условие, если число будет не только вещественным, но и отрицательным. Подскажите куда его вписать?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5. int main() {
  6. char s[80], *p;
  7. int i;
  8. //Поиск точки в числе
  9. while (1) {
  10. printf("Vvedite veshestvennoe chislo\n");
  11. scanf("%s", s);
  12. p = strchr(s, '.');
  13. int wasError = 0;
  14. for (i = 0; i < strlen(s); i++) {
  15. if (s[i] != '.' && (s[i] < '0' || s[i] > '9')) {
  16. printf("Ne chislo\n");
  17. wasError = 1;
  18. break;
  19. }
  20. }
  21. if (wasError) // была буква
  22. continue;
  23. // точки нет ИЛИ точка в начале ИЛИ точка в конце ИЛИ > 1 точки
  24. if (p == NULL || p == s || p == s + strlen(s) - 1 || strchr(p + 1, '.') != NULL) {
  25. printf("Chislo ne veshestvennoe\n");
  26. }
  27. else {
  28. printf("Chislo veshestvennoe\n");
  29. break;
  30. }
  31. }
  32. return 0;
  33. }

Решение задачи: «Проверка строки на вещественное число»

textual
Листинг программы
  1.     char s[80];
  2.     int i, wasError;
  3.  
  4.     setlocale(LC_ALL,"Rus");
  5.     do
  6.     {
  7.         printf("Введите вещественное число: ");
  8.         scanf("%s", s);
  9.         for (wasError = i = 0; i<strlen(s) && !wasError; i++)
  10.         wasError=s[i]=='-' && i ||
  11.                  s[i]!='-' && s[i] != '.' && (s[i]<'0' || s[i]>'9');
  12.     }while(wasError);
  13.     printf("%lf\n",atof(s));

Объяснение кода листинга программы

  1. Объявлены две переменные: s типа char и i типа int. Значение переменной s будет использоваться как строка для ввода числа, а переменная i будет использоваться для подсчета количества символов в этой строке.
  2. Установлена локальная настройка на русский язык с помощью функции setlocale.
  3. Запускается бесконечный цикл do-while, который будет выполняться до тех пор, пока не будет введено корректное вещественное число.
  4. В начале цикла выводится приглашение для ввода вещественного числа.
  5. С помощью функции scanf введенная строка сохраняется в переменной s.
  6. Переменная wasError инициализируется значением 0, а переменная i инициализируется значением 0.
  7. В цикле for происходит проверка корректности введенной строки. Если найден дефис, и i меньше значения strlen(s), то значение wasError не изменяется. Если найден символ, который не является дефисом, числом или точкой, и i меньше значения strlen(s), то значение wasError устанавливается в 1. Если i достигает значения strlen(s), то цикл завершается.
  8. После выхода из цикла for, если значение wasError равно 0, то введенное число преобразуется в тип double с помощью функции atof и выводится на экран.
  9. Если значение wasError не равно 0, то цикл продолжается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы