Проверка строки на вещественное число - 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
, то цикл продолжается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д