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

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

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

Все готово, теперь нужно куда-нибудь запихнуть условие, если число будет не только вещественным, но и отрицательным. Подскажите куда его вписать?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
int main() {
    char s[80], *p;
    int i;
    //Поиск точки в числе
    while (1) {
        printf("Vvedite veshestvennoe chislo\n");
        scanf("%s", s);
        p = strchr(s, '.');
        int wasError = 0;
        for (i = 0; i < strlen(s); i++) {
            if (s[i] != '.' && (s[i] < '0' || s[i] > '9')) {
                printf("Ne chislo\n");
                wasError = 1;
                break;
            }
        }
        if (wasError) // была буква
            continue;
        // точки нет ИЛИ точка в начале ИЛИ точка в конце ИЛИ > 1 точки
        if (p == NULL || p == s || p == s + strlen(s) - 1 || strchr(p + 1, '.') != NULL) {
            printf("Chislo ne veshestvennoe\n");
        }
        else {
            printf("Chislo veshestvennoe\n");
            break;
        }
    }
    return 0;
}

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

textual
Листинг программы
    char s[80];
    int i, wasError;
 
    setlocale(LC_ALL,"Rus");
    do
    {
        printf("Введите вещественное число: ");
        scanf("%s", s);
        for (wasError = i = 0; i<strlen(s) && !wasError; i++)
        wasError=s[i]=='-' && i || 
                 s[i]!='-' && s[i] != '.' && (s[i]<'0' || s[i]>'9');
    }while(wasError);
    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
Похожие ответы