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

float vs string

20.02.2011, 15:57. Показов 4013. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru