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