неверный вывод, должно быть другое число (345.876)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
#include<iostream>
void str_to_double(char st[], double res) {
    int i = 0;
    int del = 10;
     for (int i=0; st[i] != '.'; i++) {
         res = res * 10 + (st[i] - '0');
     }
    i++;
    for (int i=0; i < strlen(st); i++) {
        res += (double)(st[i] - '0') / (double)del;
        del *= 10;
    }
    printf("%lf", res);

}
int main() {
    char st[] = "345.876";
    double res = 0;
    str_to_double(st, res);
}

Ответы (1 шт):

Автор решения: Zhihar
for (int i=0; i < strlen(st); i++) {
    res += (double)(st[i] - '0') / (double)del;
    del *= 10;
}

а тут вы взяли и пошли опять с начала строки

надо было

for (; i < strlen(st); i++) {

и кстати в первом цикле (хотя это не влияло на результат) надо бы тоже

for (; st[i] != '.'; i++) {
→ Ссылка