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

Форматирование поток ввода\вывода

16.10.2011, 22:23. Показов 3813. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, прощу объяснить и помочь дописать небольшой кусочек программы.

3адание:
Определить структуру, елементами которой есть данные про студента (фамилия, стедний бал, стипендия). Ввести данные с клавиатуры, записать в текстовый и бинарный файл.Во время запись в текстовый файл отформатировать данные с помощью параметризованных манипуляторов (точность, ширина поля, заполнители), простих манипуляторов (систем исчисления, игнорирование пробелов), флажков форматирования(выравнивание данных, переведение в верхний реестр и т.д.).

Проблема:
Определил, записал в текстовый и бинарный файлы, но вот с форматированием не очень понимаю.
С шириной еще разобрался
Не пугайтесь размерам СППшника. Интересует только функция Doit,а точнее строкии 89-92. Насколько я понял, форматирование нужно указывать именно там. Если с width еще кое-как разобрался, то как точность, заполнители и так далее сделать?
p.s. комментарии на Украинском, не пугайтесь.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string.h>
#include <conio.h>
#include <iomanip>
using namespace std;
 
struct stud
{
char name[20]; //ім'я студента
char scholarship[20]; //стипендія
char mark[20];//середній бал
};
 
struct student                 
{
    stud studentt[15];
    int stnum; //кількість студентів
};
 
stud student;
 
ifstream f1; //файловий потік введення
ofstream f2; //файловий потік виведення
 
void input() //введення даних
{ 
f2.open("binar.dat", ios::out|ios::binary); //відкрити вхідний потік
 
    if(!f2) //якщо файл не існує 
    {
    cout<<"Error in source file "<<endl; //вивести повідомлення
    }  
    else
    {           
    char answer_stud; //параметр закінчення введення даних про студента
               
        int j=0; //початкове значення лічильника кількості студентів
            
            do  
            {
            //введення даних про студента
            cout<<"\nStudent\'s name: "; 
            cin>>student.name;
            f2<<student.name<<endl;
            fflush(stdin);
 
            cout<<"Student\'s scholarship: ";
            cin>>student.scholarship;
            f2<<student.scholarship<<endl;
            fflush(stdin);
 
            cout<<"Student\'s mark: ";
            cin>>student.mark;
            f2<<student.mark<<endl;
            fflush(stdin);
 
            j++; //перехід до наступного студента
 
            cout<<"\nDo you want to add another student? y/n"<<endl;
            answer_stud = getch();
            }
            while(answer_stud != 'n'); //кінець введення даних про студента 
                    }
    f2.close(); //закриття файлу
    }
int doit(const char *source, const char *dest) //копіювання
{ 
char c; //символ, що зчитується з файлу
 
f1.open(source,ios::in); //відкрити вхідний потік
 
if(!f1) //якщо файл не існує 
{
cerr<<"Error in source file "<<source<<endl; return -1;} //вивести повідомлення
 
f2.open(dest,ios::out); //відкрити вихідний потік
 
if(!f2) //якщо потік відкрити неможливо
{
cerr<<"File already exist "<<dest<<endl; return -1;}
 
while(f1) //поки не кінець вхідного потоку
{
f1.get(c); //зчитувати з потоку по одному символу
f2.width(2);//мінімальна ширина поля виведення
 
f2<<c; //записати символ у вихідний потік
} 
 
cout<<endl<<"File created and its size is"; //вивести повідомлення
long size=f2.tellp();     
cout<<" "<<size<<" bytes\n";//вивести розмір створенного файлу
cout<<"Goodbit checking(No errors in bits if 1): "<<cin.good()<<endl<<endl;//перевірка на помилки в бітах
getch();
f1.close(); //закрити файли
f2.close();
cin.clear();//очищення потоку
return 1;
}
int main()
 
{
    char s[50] = "binar.dat", d[50];
    int result=-1;  
 
    // цикл меню
    while(true)
    {
        system("cls");
        cout<<"1. Input binar file"<<endl;
        cout<<"2. Create text file with formating"<<endl;
        cout<<"0. Exit"<<endl;
        cout<< "Chosen menu item: ";
        int key; //номер пункту меню
        cin>>key; //вибір потрібного пункту меню
 
        // вибір пунктів меню
        switch(key)
        {
           case 1: {input();break;}  // запис у файл
           case 2: {while(result!=1)
                 {
                 cout<<"\n"<<"Enter name for txt file: ";
                 cin>>d; //ввести ім’я вихідного файлу
                 result = doit(s, d); //скопіювати файл
                 }break;}
           case 0: {exit(0);break;}  // вихід
           default: {cout<<"Choose another"<<endl;;break;}
        }
    }
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2011, 22:23
Ответы с готовыми решениями:

Поток ввода-вывода
#include &lt;iostream&gt; using namespace std; int main() { int i; while(true) { if(cin&gt;&gt;i)

Как можно сделать виртуальный поток ввода / вывода?
есть программа, которая считает кол-во слов в строке причудливым способом, конечно можно сделать другим способом, но есть желание узнать,...

Перегрузить операторы ввода/вывода в поток (>>, <<) для класса
Помогите, перегрузить операции ввода/вывода в поток (&gt;&gt;, &lt;&lt;) для класса A. Для объекта класса A должны работать инструкции: A a;...

7
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
16.10.2011, 22:33
в iomanip есть std::setprecision() для указания точности. если использовать его вместе с std::fixed то вы можете формативаровать вывод.

например :
C++
1
2
3
double d = 1234.1234545;
 
cout << fixed << setprecision(2) << d;
в результате напечает 1234.12
0
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
16.10.2011, 22:39  [ТС]
Как с функцией cout это сделать я понимаю, а вот как это использовать с текстовым файлом - нет.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
16.10.2011, 22:53
Я возможно чего-то не понимаю,.... но вы разве не можете перед отправкой в файл округлить данные до необходимой вам точности ? Или о какой вы о какой-то другой точности?
0
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
17.10.2011, 00:12  [ТС]
Дело в том, что я тоже не понимаю.
Насколько я понял, нужно данные именно в момент перед записью, и да точность там не где округлять, так как double вообще нету.
Но тогда, какими еще манипуляторами кроме width можно пользоваться?

Добавлено через 55 минут
ап
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
17.10.2011, 00:24
можете показать часть файла из которого читаете и то как вы хотите видеть данные в файле куда отгружаете?
0
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 43
17.10.2011, 01:57  [ТС]
Данные в файл вводяться через функцию инпут.
Создается струтура(имя, степендия, оценка) путём ввода с консоли и потоково заносится в файл бинарный, потом копируеться из бинарного в текстовый и должно происходить форматирование...
Хочу видеть - согласно условиям задачи о форматировании.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
17.10.2011, 02:09
ТУТ сказано что fstream наследует от ios_base то что вам надо. (i.e. precision, flags, width, ... etc.)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2011, 02:09
Помогаю со студенческими работами здесь

Что из себя представляет допустим поток ввода/вывода
Поясните пожалуйста что из себя представляет допустим поток ввода/вывода в С++ ? Это участок памяти который представляет собой что-то вроде...

Как сделать отступы или , чтобы входной поток(ввода) отдельно от вывода
#include &lt;iostream&gt; #define MAX_N 100 using namespace std; class Stack { int st_size=0; int st_elements; ...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

Форматирование вывода
почему правая граница оказывается на месте 20 знака? значение width=20,const int П.5.18.Правил Запрещено размещать задания и решения...

Форматирование вывода
Есть такой код, который ищет первый минимальный элементы на пересечении строки и столбца: #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru