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

Создание и чтение файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
02.05.2011, 20:54     Создание и чтение файла #1
Помогите, пожалуйста, с решением лабораторной.
Задание:
Создать программы для табуляции функции и записывание результатов табуляции в дисковые файлы. Создать программы для считывания результатов табуляции из файлов и выведения их на экран.
Оформление:
При записывании результатов в файл без структуры результаты записывать в виде:
X=........... F(X)= ...........
Вывести данные о студентах, которые имеют 1 оценку 3.
Я так понимаю, что сначала необходимо создать таблицу с именами студентов и их оценками. Но как реализовать - не знаю.

Добавлено через 2 часа 26 минут
Помогите, пожалуйста, ребята!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2011, 20:54     Создание и чтение файла
Посмотрите здесь:

Создание и чтение файлов в C++ C++
Создание SAVE файла. Запись и чтение. C++
C++ Чтение из файла
Чтение из файла. C++
C++ Чтение с файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
04.05.2011, 21:45  [ТС]     Создание и чтение файла #2
Вот, создал массив, который можно использовать за основу.
C++
1
2
3
4
5
6
7
8
srand(time(NULL));
        char a[5][5] = { 
                                        {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
Добавлено через 2 часа 35 минут
Прочитал на форуме, как можно сохранить в файл ВЕСЬ массив, а мне необходимо, только те рядки, где у студентов первая оценка 3. Как это можно реализовать?
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
#include <iostream.h>
#include <fstream.h>
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    cout<<"
           char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
output << double_array[n] << endl;
system ("pause");
output.close();
}
Помогите, пожалуйста, очень необходимо.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.05.2011, 00:11     Создание и чтение файла #3
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
#include <iostream.h>               // -- это не нужно 
#include <fstream.h>                        // -- это не нужно
#include "stdafx.h"                            // -- это зависит от способа создания проекта.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
        cout<<"
           char a[5][5] = {       {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
        "<< "wrote in the file C:\\results.txt succesfully!";
                ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << double_array[n] << endl;               
system ("pause");
output.close();
}
1. Неправильно создан массив структур, вернее, его совсем нет
Надо сначала описать структуру с полями, а потом создать массив из таких структур
2. Наверху у вас массив a, причем двумерный, а выводите в цикле - одномерный double_array - совсем другой
3. Чтобы выводить не все, нужно использовать оператор if
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 19:39  [ТС]     Создание и чтение файла #4
Вот, немного изменил программу. Поправьте, пожалуйста.
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
     srand(time(NULL));
        char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    cout<<"
           char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << a[n][n] << endl;
system ("pause");
output.close();
}
P.S. Не будьте, пожалуйста, ко мне слишком критичны, я ведь только учусь программировать, так сказать делаю первые шаги
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.05.2011, 20:50     Создание и чтение файла #5
1. Создаем структуру:
C++
1
2
3
4
struct Student
{   string FIO;
    int rating[4];
};
2. Создаем массив структур и инициализируем:
C++
1
2
3
4
5
6
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 20:59  [ТС]     Создание и чтение файла #6
Вот изменил согласно Вашим указаниям:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    struct Student
{   string FIO;
    int rating[4];
};
    
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    cout<<"
           Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << struct Student << endl;
system ("pause");
output.close();
}
А в каком месте и как мне поставить оператор if, что бы выбирать тех студентов, которые необходимы?
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.05.2011, 21:35     Создание и чтение файла #7
Во-первых, надо записать всю эту информацию в файл. То, что записано у вас - это не запись в файл, а фиг знает что.
Тут есть некоторые проблемы со string. Поэтому лучше сначала записывать числа, а потом уже FIO.
1. Объявление объекта-потока и связывание его с файлом:
C++
1
2
ofstream output("C:/results.txt", ios::out | ios::trunc);
if (!output.is_open()) return;
Можно чуть проще:
C++
1
2
ofstream output("C:/results.txt");               // -- по умолчанию  ios::out | ios::trunc
if (!output.is_open()) return;
Потом записать туда данные:
C++
1
2
3
4
5
6
7
 int i = 0;
while (i < 5)
{   for(int j = 0; j < 4; ++j) output << m[i].raiting[j] << ' ';
     output << m[i].FOI.c_str() << endl;
     ++i;
}
output.close();
Добавлено через 23 минуты
И только после этого можно читать данные из файла и выводить в новый файл:
Нам потребуется два файла: тот который записали - входной, и новый - выходной
C++
1
2
3
4
ifstream input("C:/results.txt");               // -- по умолчанию  ios::in
if (!output.is_open()) return;
ofstream output("C:/new_results.txt");               // -- по умолчанию  ios::out | ios::trunc
if (!output.is_open()) return;
Еще нужна переменная для чтения:
C++
1
Student p;
Потом можно писать цикл по чтению/ Причем, в каком порядке выводили, в таком порядке и читать придется:
C++
1
2
3
4
5
6
7
8
9
10
11
bool yes = true;
while(yes)
{ input >> p.rating[0] >> p.rating[1] >> p.rating[2] >> p.rating[3];
   input >> p.FIO; 
   if(!input.eof())       // -- если не конец файла
   { if(условие отбора) 
     { // -- вывод в оутпут - как раньше было написано --
     }
   } else yes = false;      // -- для выхода из цикла
}
input.close();
Вот как-то так.
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 21:35  [ТС]     Создание и чтение файла #8
Внес некоторые изменения:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    struct Student
{   string FIO;
    int rating[4];
};
    
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    cout<<"
           Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    "<< "wrote in the file C:\\results.txt succesfully!";
        
        ofstream output("C:/results.txt", ios::out | ios::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
int i = 0;
while (i < 5)
{   for(int j = 0; j < 4; ++j) output << m[i].raiting[j] << ' ';
     output << m[i].FOI.c_str() << endl;
     ++i;
}
output.close();
}
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.05.2011, 21:38     Создание и чтение файла #9
Внимательно прочитайте мой текст и поправьте пару МОИХ опечаток. Внимательное чтение текста проги - обязательное профессиональное умение программера. Учитесь.
ZloyVolkey
 Аватар для ZloyVolkey
27 / 27 / 6
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 21:47     Создание и чтение файла #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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>  
 
#define maxstud 5
 
struct student
{
    char fio[20];
    int rating[4];
};
 
int foo();
 
int main()
{
    student m[maxstud] = {{"Petrenko", { 2, 2 ,4 ,5}},
                       {"Ivanov", {3, 3, 2, 3}},
                       {"Savchenko", {5, 3, 2, 4}},
                       {"Bondar", {3, 5, 4, 5}},
                       {"Levchenko", {4, 2, 5, 3}}};
    for (int i = 0; i < 5; i++)
    {
        printf("%s\n", m[i].fio);
        for (int j = 0; j < 4; j++)
            printf("%i ", m[i].rating[j]);  
            printf("\n");
    }
 
        int n[maxstud], kol, t = 0, tcount = 0;
 
    for (int i = 0; i < maxstud; i++)
    {   
        kol = 0;
        for (int j = 0; j < 4; j++)
            {printf("rating = %i \n", m[i].rating[j]);
            if (m[i].rating[j] == 3)
                kol++;}
        printf("kol = %i", kol);
        if (kol == 1)
            { n[t] = i; t++; }
        printf("t = %i\n", t);
    }
 
    FILE *fp;
    fp = fopen("fail.txt", "w");
    
    for (int i = 0; i < t; i++)
        printf("n[i] = %i\n", n[i]);
 
    int temp;
    for (int i = 0; i < t; i++)
    {
        temp = n[i];    
        fprintf(fp, "%s\n", m[temp].fio);
    }
    fclose(fp);
 
    return 0;
}
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 21:59  [ТС]     Создание и чтение файла #11
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Внимательно прочитайте мой текст и поправьте пару МОИХ опечаток.
Вы меня заводите просто в тупик.

ZloyVolkey, огромное спасибо!
Но что-то не получается запустить Вашу программу (дома программа BORLANDC выдает кучу ошибок, а Microsoft C++ 2010 - не запускает совсем файлы .cpp).
Скинь, пожалуйста, скрин запущенного файла fail.txt и роботы программы. Еще раз благодарю.
ZloyVolkey
 Аватар для ZloyVolkey
27 / 27 / 6
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:07     Создание и чтение файла #12
Вот результат работы программы:

Bash
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
$ cat main.txt
Petrenko
2 2 4 5 
Ivanov
3 3 2 3 
Savchenko
5 3 2 4 
Bondar
3 5 4 5 
Levchenko
4 2 5 3 
rating = 2 
rating = 2 
rating = 4 
rating = 5 
kol = 0t = 0
rating = 3 
rating = 3 
rating = 2 
rating = 3 
kol = 3t = 0
rating = 5 
rating = 3 
rating = 2 
rating = 4 
kol = 1t = 1
rating = 3 
rating = 5 
rating = 4 
rating = 5 
kol = 1t = 2
rating = 4 
rating = 2 
rating = 5 
rating = 3 
kol = 1t = 3
n[i] = 2
n[i] = 3
n[i] = 4
Bash
1
2
3
4
$ cat fail.txt
Savchenko
Bondar
Levchenko

тут много принтэфов, но они были для отладки + вам для понимания что происходит.
Подключите еще библиотеку conio.h и в самом конце перед return 0; напишите getch(); чтобы видели результат.

Какие ошибки выдаёт компилятор?
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 22:25  [ТС]     Создание и чтение файла #13
Ё File Edit Search Run Compile Debug Project Options Window Help
╔═[■]════════════════════════════ LAB#6~1.CPP ══════════════════════════5═[↑]═╗░
║#include <stdio.h> ▲░
║#include <conio.h> ■░
║#define maxstud 5 ▒░
║ ▒░
║struct student ▒░
║{ ▒░
║ char fio[20]; ▒░
║ int rating[4]; ▒░
║}; ▒░
║ ▒░
║int foo(); ▒░
║ ▒░
║int main() ▒░
║{ ▒░
║ student m[maxstud] = {{"Petrenko", { 2, 2 ,4 ,5}}, ▒░
║ {"Ivanov", {3, 3, 2, 3}}, ▒░
║ {"Savchenko", {5, 3, 2, 4}}, ▒░
║ {"Bondar", {3, 5, 4, 5}}, ▒░
║ {"Levchenko", {4, 2, 5, 3}}}; ▒░
║ for (int i = 0; i < 5; i++) ▒░
║ { ▒░
║ printf("%s\n", m[i].fio); ▒░
║ for (int j = 0; j < 4; j++) ▒░
║ printf("%i ", m[i].rating[j]); ▒░
║ printf("\n"); ▒░
║ } ▒░
║ ▒░
║ int n[maxstud], kol, t = 0, tcount = 0; ▒░
║ ▒░
║ for (int i = 0; i < maxstud; i++) ▒░
║ { ▒░
║ kol = 0; ▒░
║ for (int j = 0; j < 4; j++) ▒░
║ {printf("rating = %i \n", m[i].rating[j]); ▒░
║ if (m[i].rating[j] == 3) ▒░
║ kol++;} ▼░
╚═══════ 9:29 ════◄■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒►─┘░
┌────────────────────────────────── Message ─────────────────────────────4─────┐
│ Compiling LAB#6~1.CPP: │
│•Error LAB#6~1.CPP 1: Unable to open include file 'STDIO.H' │
│ Error LAB#6~1.CPP 2: Unable to open include file 'CONIO.H' │
│ Error LAB#6~1.CPP 22: Function 'printf' should have a prototype │
│ Error LAB#6~1.CPP 30: Multiple declaration for 'i' │
│ Error LAB#6~1.CPP 43: Undefined symbol 'FILE' │
│ Error LAB#6~1.CPP 43: Undefined symbol 'fp' │
│ Error LAB#6~1.CPP 44: Function 'fopen' should have a prototype │
└──────────────────────────────────────────────────────────────────────────────┘
F1 Help Alt-F8 Next Msg Alt-F7 Prev Msg Alt-F9 Compile F9 Make F10 Menu
Где-то так...
ZloyVolkey
 Аватар для ZloyVolkey
27 / 27 / 6
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:34     Создание и чтение файла #14
По поводу Борланд Си ничего не могу сказать, проверьте пути к библиотекам...и запускаются ли там другие программы?
В Visual Studio создайте новый проект и вставьте туда код, запустится.
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 22:39  [ТС]     Создание и чтение файла #15
Сделал как Вы сказали:
Миниатюры
Создание и чтение файла  
ZloyVolkey
 Аватар для ZloyVolkey
27 / 27 / 6
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:41     Создание и чтение файла #16
Проект сохранили?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 23:05     Создание и чтение файла
Еще ссылки по теме:

C++ чтение из файла и создание обьектов MFC
Чтение с файла C++
C++ Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии)

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

Или воспользуйтесь поиском по форуму:
alex-soft
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 23:05  [ТС]     Создание и чтение файла #17
Вот посмотри, пожалуйста.
Вложения
Тип файла: rar 6.rar (15.5 Кб, 9 просмотров)
Yandex
Объявления
05.05.2011, 23:05     Создание и чтение файла
Ответ Создать тему
Опции темы

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