Форум программистов, компьютерный форум CyberForum.ru

float vs string - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 15:57     float vs string #1
в общем есть такая конструкция
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" и потом уже ее записать в файл.


Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2011, 15:57     float vs string
Посмотрите здесь:

конвертировать System::String ^ в float C++
Преобразовать string в float C++
C++ Конвертирование float/int to string
c++ string to float C++
C++ преобразование string в float
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:04     float vs string #2
Для начала
C
1
char* fn = "D:\\test.txt";
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 16:06  [ТС]     float vs string #3
а что с ним?

Добавлено через 54 секунды
ааа, понял, ок, но оно и так работало... но я изменю.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:07     float vs string #4
И неплохо бы fprintf юзать для этого.

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

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

и еще, как оставлять 3 знака после запятой?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:24     float vs string #10
Конструкция подчиняется описанному правилу, там вроде всё понятно. Чтобы оставить три знака после запятой, %lf надо заменить на %.3f
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 16:31  [ТС]     float vs string #11
благодарствую

C++
1
cout << "\n "<< x1 << " < x =< 3: \n";
это у меня выводит на экран. В файл над такое же записать, это правильно?
C++
1
2
    fprintf(pfi,"%d",x1);
    fprintf(pfi, "< x <3\n");
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:37     float vs string #12
Это сишный вариант. В плюсах стоит делать так:
C++
1
2
3
4
#include <fstream>
//...
std::ofstream output("output.txt");
output << "something";
На месте "output.txt" должен быть путь к файлу, куда будем выводить. На месте "something" - то, что будем выводить. Короче говоря, с output теперь можно работать так же, как со стандартным std::cout.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
20.02.2011, 16:38     float vs string #13
kRicha, можно так:
C
1
fprintf(fpi, "\n%d < x < 3\n", x1);
А вообще, прочитай про форматный вывод
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 16:41  [ТС]     float vs string #14
Цитата Сообщение от 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)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:45     float vs string #15
Цитата Сообщение от kRicha Посмотреть сообщение
но летит куча ошибок...
Надо же, ни один, кто говорит про ошибки, не понимаете, что тут не экстрасенсы сидят... Какие ошибки? Подключили fstream?

Добавлено через 1 минуту
И покажите код, который выдаёт ошибки.
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 16:58  [ТС]     float vs string #16
о, забыл подключить... я так понял тогда над юзать что-то одно? либо 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");
}
вот программа.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 16:59     float vs string #17
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 секунд
Таким образом, один / убираем, один добавляем - и вот ужа наша программа выводит информацию в файл. Проделываем всё в обратном порядке - видим данные на консоли.
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 17:00  [ТС]     float vs string #18
не, давайте без извращенских способов
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.02.2011, 17:02     float vs string #19
kRicha, ну тогда только переписывать пол-программы, чтобы поменять режим ввода-вывода)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2011, 17:03     float vs string
Еще ссылки по теме:

C++ Из float в string
C++ Преобразование String в float
C++ Перевод из string в float

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

Или воспользуйтесь поиском по форуму:
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 118
20.02.2011, 17:03  [ТС]     float vs string #20
работает же все, кроме этой строки
C++
1
fprintf(pfi, "\n%d < x < 3\n", x1);
почему оно вместо х1 0 ставит
Yandex
Объявления
20.02.2011, 17:03     float vs string
Ответ Создать тему
Опции темы

Текущее время: 00:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru