Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119

float vs string

20.02.2011, 15:57. Показов 4057. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в общем есть такая конструкция
C++
1
2
3
4
5
6
FILE* pfi;
    char* fn = "D:/test.txt";
    pfi= fopen(fn,"w+");
    fputs("\tx=",pfi);
    fputs(x,pfi);
    fclose(pfi);
x float и функция не хочет писать симво в файл. Подскажите как его сделать стрингом?
Ну или как можно соединисть строку "\t x=" со значением 2.452354, что б вышла в итоге строка "\t x=2.452354" и потом уже ее записать в файл.


Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2011, 15:57
Ответы с готовыми решениями:

Из float в string
Как из переменной типа флоат записать число в string? float x = -123.56; string Str; Нужно чтобы Str стало равно "-123.56"

String разбить на float
Всем привет.Хочу создать консольную программу по нахождению неизвестной переменной - x. Программа будет работать так : string...

Преобразование string в float
подскажите как оптимальнее преобразовать число в формате CString -1E+008, которое я получаю из Excel-я. Может существуют стандартные...

29
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:04
Для начала
C
1
char* fn = "D:\\test.txt";
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:06  [ТС]
а что с ним?

Добавлено через 54 секунды
ааа, понял, ок, но оно и так работало... но я изменю.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:07
И неплохо бы fprintf юзать для этого.

C
1
fprintf(pfi, "\tx = %lf", x);
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:10  [ТС]
C++
1
fprintf(fn, "\tx = %lf", x);
error C2664: fprintf: невозможно преобразовать параметр 1 из "char []" в "FILE *"

и, разве эта функция не выводит строку на экран?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:12
kRicha, я поправил, первым параметром конечно поток идёт.
На экран (точнее, в стандартный поток вывода, связанный с консолью) выводит printf, а fprintf - в тот поток, который мы укажем в качестве первого параметра.
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:18  [ТС]
C++
1
fprintf(pfi, "\ty = %lf", y,"\n");
а так уже юзать нельзя?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:22
kRicha, нет. Но того эффекта, которого вы хотите добиться, можно достичь так:
C
1
fprintf(pfi, "\ty = %lf\n", y);
Добавлено через 1 минуту
Вообще правило: первым параметром пишем строку в том виде, в каком хотим видеть её на экране, заменяя в ней все переменные на спецификаторы соответствующего типа, а вторым параметром сами переменные в правильном порядке.
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:23  [ТС]
да, это действительно оно. Спасибо. А не могли б вы обьяснить конструкцию?

и еще, как оставлять 3 знака после запятой?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:24
Конструкция подчиняется описанному правилу, там вроде всё понятно. Чтобы оставить три знака после запятой, %lf надо заменить на %.3f
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:31  [ТС]
благодарствую

C++
1
cout << "\n "<< x1 << " < x =< 3: \n";
это у меня выводит на экран. В файл над такое же записать, это правильно?
C++
1
2
    fprintf(pfi,"%d",x1);
    fprintf(pfi, "< x <3\n");
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:37
Это сишный вариант. В плюсах стоит делать так:
C++
1
2
3
4
#include <fstream>
//...
std::ofstream output("output.txt");
output << "something";
На месте "output.txt" должен быть путь к файлу, куда будем выводить. На месте "something" - то, что будем выводить. Короче говоря, с output теперь можно работать так же, как со стандартным std::cout.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
20.02.2011, 16:38
kRicha, можно так:
C
1
fprintf(fpi, "\n%d < x < 3\n", x1);
А вообще, прочитай про форматный вывод
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:41  [ТС]
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это сишный вариант. В плюсах стоит делать так:
C++
1
2
3
4
#include <fstream>
//...
std::ofstream output("output.txt");
output << "something";
На месте "output.txt" должен быть путь к файлу, куда будем выводить. На месте "something" - то, что будем выводить. Короче говоря, с output теперь можно работать так же, как со стандартным std::cout.
пасиб, но летит куча ошибок...
Цитата Сообщение от Nameless One Посмотреть сообщение
kRicha, можно так:
C
1
fprintf(fpi, "\n%d < x < 3\n", x1);
А вообще, прочитай про форматный вывод
да, Ваш вариант работает так же как и мой, то есть вместо введенного числа он отображает "0" (на месте х1)
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:45
Цитата Сообщение от kRicha Посмотреть сообщение
но летит куча ошибок...
Надо же, ни один, кто говорит про ошибки, не понимаете, что тут не экстрасенсы сидят... Какие ошибки? Подключили fstream?

Добавлено через 1 минуту
И покажите код, который выдаёт ошибки.
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 16:58  [ТС]
о, забыл подключить... я так понял тогда над юзать что-то одно? либо printf, либо output? потому что оно затирает...

Добавлено через 10 минут
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <fstream>
using namespace std;
 
int main(int argc, char* argv[])
{
    FILE* pfi;
    char* fn = "D:\\test.txt";
    float x1,x2,x,h,y;
    cout << "Enter x1: "; cin>>x1;
    cout << "Enter x2: "; cin>>x2;
    cout << "Enter  h: "; cin>>h;
    pfi= fopen(fn,"w+");
    cout << "\n "<< x1 << " < x =< 3: \n"; 
    fprintf(pfi, "\n%d < x < 3\n", x1);
    std::ofstream output("D:\\test.txt");
    output<< "\n "<< x1 << " < x =< 3: \n";
    for (x = x1; x <= 3; x=x+h)
    {
        y = 1;
        for (int i=0; i<=3; i++)
        {
            y=y*(x*x+i);
        }
        fprintf(pfi, "\tx = %.2f ", x);
        fprintf(pfi, "\ty = %.2f\n", y);
        cout << "\tx= " << x << "\t y= " << y << "\n";
    }
    cout << "\n "<< x << " < x < 8: \n"; 
    for (x; x<8; x=x+h)
    {
        y = (x+2)*(x*x-3);
        fprintf(pfi, "\tx = %.2f ", x);
        fprintf(pfi, "\ty = %.2f\n", y);
        cout << "\tx= " << x << "\t y= " << y << "\n";
    }
    fclose(pfi);
    system ("pause");
}
вот программа.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 16:59
kRicha, да, лучше использовать только одно. На счёт output, вы можете его обозвать как угодно, например fout.
Кстати, вот тут даже предлагал кое-кому такой извращенский способ. Например, вы в одной и той же программе выводите кучу информации в разных местах. И не хотите постоянно переписывать или комментить кучу строк, чтобы переключиться с файла на консоль и обратно. Тогда можно поступить так:
1. Консольный ввод/вывод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
//-----------------------------------------------------------------------------
//*
using std::cin;
using std::cout;
//*/
//-----------------------------------------------------------------------------
/*
#include <fstream>
char INPUT[] = "input.txt";
char OUTPUT[] = "output.txt";
std::ifstream cin(INPUT);
std::ofstream cout(OUTPUT);
//*/
//-----------------------------------------------------------------------------
 
int main()
{
    cout << "Hello, World!" << std::endl;
 
    return 0;
}
2. Файловый ввод/вывод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
//-----------------------------------------------------------------------------
/*
using std::cin;
using std::cout;
//*/
//-----------------------------------------------------------------------------
//*
#include <fstream>
char INPUT[] = "input.txt";
char OUTPUT[] = "output.txt";
std::ifstream cin(INPUT);
std::ofstream cout(OUTPUT);
//*/
//-----------------------------------------------------------------------------
 
int main()
{
    cout << "Hello, World!" << std::endl;
 
    return 0;
}
Добавлено через 58 секунд
Таким образом, один / убираем, один добавляем - и вот ужа наша программа выводит информацию в файл. Проделываем всё в обратном порядке - видим данные на консоли.
1
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 17:00  [ТС]
не, давайте без извращенских способов
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
20.02.2011, 17:02
kRicha, ну тогда только переписывать пол-программы, чтобы поменять режим ввода-вывода)))
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
20.02.2011, 17:03  [ТС]
работает же все, кроме этой строки
C++
1
fprintf(pfi, "\n%d < x < 3\n", x1);
почему оно вместо х1 0 ставит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2011, 17:03
Помогаю со студенческими работами здесь

Преобразовать string в float
Привет! Подскажите, пожалуйста, наиболее простой способ, как преобразовать значение типа string в float.

Перевод из string в float
считывается выражение (числа и 5 возможных действий +, -, /, *, %) надо его посчитать планирую делать через польскую обратную запись ...

Конвертация string в float
string to float или double обычная консоль как перевести

Преобразование String в float
Добрый день уважаемые форумчане. Подскажите пожалуйста как преобразовать String в float. Заранее благодарен.

Конвертирования float в string
Доброго времени суток...кто может обяснить что означает каждая строка... string *ch = new string, ch1; char szbuff; for (int i =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru