Считывайте данные из файла, а затем работайте с ними. Преобразование строки в float

#c #string #file

Вопрос:

У меня проблема, но я не знаю, как ее решить. Кто-нибудь может мне помочь? Проблема. В текстовом файле

 1. 20.20
2. 3
 

Я хочу взять данные из файла и использовать их. Мой код:

 int main() 
{
  string tp;
  float data_1 = 0, data_2 = 0, total = 0;

  std::fstream file;
  file.open("text.txt", ios::in);

  std::getline(file, tp);
  data_1 = std::stof(tp);

  std::getline(file, tp);
  data_2 = std::stof(tp);

  total = dat_1 * data_2;
  cout << "Total: " << total << endl;
}
 

В программе всего не 60,60, но это необходимо. В чем проблема?

Комментарии:

1. Что случилось с текстовым файлом? Это номера строк? Действительно ли файл содержит число в начале каждой строки? Или это просто проблема с форматированием в SO? Также: Какой результат вы получаете? Вы пытались использовать отладчик? Если нет, то это отличная возможность научиться им пользоваться.

2. Ты действительно этого хочешь 60,60 , нет 60.60 ?

3. Также ваш text.txt действительно содержит 1. и 2. ?

4. В текстовом файле есть 2 строки. Первая строка-20.20, а вторая строка-3. И я хочу получить 60,60.

5. какой итог[так,это продукт, а не итог] вы получили?

Ответ №1:

 #include <iostream>
#include <string>
#include <fstream>

int main(void)
{
    std::string tp;
    float data_1 = 0, data_2 = 0, total = 0;
    std::ifstream file("text.txt");

    std::getline(file, tp);
    data_1 = std::stof(tp);
    std::getline(file, tp);
    data_2 = std::stof(tp);
    total = data_1 * data_2; // you wrote dat_1 instead of data_1
    std::cout << total << std::endl;
    return (0);
}
 

Комментарии:

1. В программе я получил ошибку. ошибка: «stof» не является членом «std», он находится в строках, где записано data_1 = std::stof(tp);

Ответ №2:

Во-первых, dat_1 не декларируется, а должно быть data_1 .

Затем вы можете использовать std::fixed его, чтобы указать количество цифр после точки и std::setprecision указать количество цифр.

 cout << "Total: " << std::fixed << std::setprecision(2) << total << endl;
 

Рекомендации:

Если вы действительно хотите 60,60 , а не 60.60 печатаете , вы можете использовать std::replace для изменения символа.

 #include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
#include <sstream>
using std::ios;
using std::cout;
using std::endl;

int main(){
    float total = 60.60;
    std::stringstream ss;
    ss << std::fixed << std::setprecision(2) << total << endl;
    std::string str = ss.str();
    std::replace(str.begin(), str.end(), '.', ',');
    cout << "Total: " << str << endl;
}
 

Комментарии:

1. Нет, я хочу получить 60,60. Но в текстовом файле можно было бы написать другое число.