Найти сумму чисел, записанных в виде строки - C (СИ)
Формулировка задачи:
Помогите пожалуйста, в строке записаны вещественные числа, которые разделены пробелами. Найти сумму этих чисел.
В общем есть часть программы, но ф-ия atof считывает всего одно вещ. число, как зациклить эту ф-ию чтобы с каждого прохода она считывала новое значение и прибавляло к предыдущему?
#include <stdio.h>
#include <stdlib.h>
double atof1 (const char s[])
{
double val, power;
int i, sign;
for (i = 0; s[i]<=' '; i++);
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val = 0.0; (s[i]>='0')&&(s[i]<='9'); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] =='.')
i++;
for (power = 1.0; (s[i]>='0')&&(s[i]<='9'); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
}
int main()
{
char s1[50];
double x;
gets(s1);
x=atof1(s1);
printf ("%f", x);
getchar ();
return 0;
}Решение задачи: «Найти сумму чисел, записанных в виде строки»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
double atof1 (char **s)
{
double val, power;
int sign;
for (; *(*s)<=' '; (*s)++);
if (*(*s) == 0)
return 0;
sign = (*(*s) == '-') ? -1 : 1;
if (*(*s) == '+' || *(*s) == '-')
(*s)++;
for (val = 0.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++)
val = 10.0 * val + (*(*s) - '0');
if (*(*s) =='.')
(*s)++;
for (power = 1.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++) {
val = 10.0 * val + (*(*s) - '0');
power *= 10.0;
}
return sign * val / power;
}
int main()
{
char s1[50] = "123.34 45.6";
char *s2 = s1;
double x=0;
while(*s2 != 0)
x += atof1(&s2);
printf ("%f", x);
getchar ();
return 0;
}
Объяснение кода листинга программы
- В функции atof1() происходит преобразование строки в число.
- В функции main() определяется входная строка s1, содержащая
123.34 45.6, и создается указатель s2 на первый символ этой строки. - Переменная x инициализируется значением 0.
- В цикле while происходит чтение строки до конца с помощью указателя s2 и добавление каждой прочитанной строки к x с помощью функции atof1().
- После окончания цикла выводится значение x с помощью функции printf().
- В конце программы вызывается функция getchar(), чтобы программа не закрылась сразу после вывода, и возвращается 0.