Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 4
1

Stof преобразует в int вместо float

27.02.2019, 00:23. Показов 5327. Ответов 5

Author24 — интернет-сервис помощи студентам
Нужно прочитать файл с последовательностью дробных чисел и преобразовать его в массив дробных чисел.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <fstream>
#include <string>
 
void main()
{
    string line; float *m = new float[10];
    ifstream file("data.txt");
    if (file.is_open())
    {   
 
        for (int i = 0; !file.eof(); i++)
        {   
            file >> line;
            cout << line << " ";
            m[i] = stof(line);
        }
        cout << endl;
        file.close();
    }
    cout << line << endl; // для наглядности вывожу последнюю считанную строку (файл читается по пробелам)
    cout << stof(line) << endl;
    cout << m[9] << endl;
    delete[] m;
}
Вывод

1.0 2.1 3.2 12.8 13.0 14.1 15.5 21.9 25.0 31.4
31.4
31
31


В чем проблема? Почему вместо 31.4 на 3 и 4 строке выводится 31?

Добавлено через 19 минут
C++
1
2
3
4
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
разумеется
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2019, 00:23
Ответы с готовыми решениями:

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int)
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй...

Реализовать выведение данных с типом float, вместо int
Здравствуйте, мне нужна помощь с переделыванием этого кода, чтобы в конечном массиве могли выходить...

Функции float average(int arrray[],int from,int to)
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции...

Почему при умножении разнотипных переменных (например, float и int) получается int?
Почему при умножении разнотипных переменных (float price и int unit) получается int? Это же не...

5
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
27.02.2019, 00:26 2
Лучший ответ Сообщение было отмечено mrbimax как решение

Решение

а так не проще?
C++
1
file>>m[i]
1
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 4
27.02.2019, 00:40  [ТС] 3
file имеет тип string же? Элемент m[i] - float.
Мне нужно считать строку до пробела, перевести ее в float и добавить в float-массив.

Добавлено через 4 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
а так не проще?
C++
1
file>>m[i]
Но на удивление работает. Можете объяснить - почему так?
Как тип string преобразуется автоматически в float без использования функции stof?

И мне всё также неясно, почему мой вариант не работает.
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,070
27.02.2019, 05:04 4
Цитата Сообщение от mrbimax Посмотреть сообщение
И мне всё также неясно, почему мой вариант не работает.
Из-за типичной ошибки - использования цикла с !file.eof() - произошел вылет за пределы массива m. Далее поведение не определено.

Распространенные ошибки

Цитата Сообщение от mrbimax Посмотреть сообщение
file имеет тип string же?
Это что значит? С каких это пор file стало string?

Цитата Сообщение от mrbimax Посмотреть сообщение
void main()
int main() а не void main()
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
27.02.2019, 06:53 5
mrbimax, интереса ради.
Попробуйте цикл заменить на такой
C++
1
2
3
4
5
6
    
        for (int i = 0; i<10 && file >> line; i++)
        {
           cout << line << " ";
            m[i] = stof(line);
        }
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
27.02.2019, 11:20 6
Цитата Сообщение от mrbimax Посмотреть сообщение
file имеет тип string же? Элемент m[i] - float.
объект file это поток, аналогичный cin и cout, операции чтения и записи в поток предусматривают преобразование для стандартных типов, в вашем же коде выражения
C++
1
2
cout << stof(line) << endl;
    cout << m[9] << endl;
не вызывают у вас вопросов?
Цитата Сообщение от mrbimax Посмотреть сообщение
И мне всё также неясно, почему мой вариант не работает.
Возможно не распознается мантисса, у функции stof есть второй параметр, в который записывается позиция последнего не распознанного символа, можете объявить переменную типа int value и передать в функцию stof(line,&value), что бы посмотреть в каком символе проблема и есть ли она вообще.
0
27.02.2019, 11:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2019, 11:20
Помогаю со студенческими работами здесь

Как происходит преобразование int<<float<int
Как происходит преобразование int&lt;&lt;float&lt;int int n=222222222; float f=(float)n; n=(int)f;...

Int в Float
Доброго времени суток. у меня уже второй раз возник вопрос по поводу перевода Int в Float...

Int в float
Как перевести допустим int v =1 в float b = 0.1? Добавлено через 5 минут Закройте тему

Преобразование int в float
Добрый день! int x = 20110511; double a = x; cout&lt;&lt;x&lt;&lt;' '&lt;&lt;a&lt;&lt;'\n'; Результат: 20110511...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru