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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
brthtkr
Сообщений: n/a
#1

Чтение и вывод массива из файла - C++

17.02.2013, 11:53. Просмотров 518. Ответов 1
Метки нет (Все метки)

всем привет! пытаюсь постичь азы си++, но кое-что не получается. этот код должен был реализовать запись в файл матрицу случайных чисел и далее считать из этого файла в другую матрицу и вывести на экран. я пытался сделать что мог, но вот что получилось и хотелось бы получить ответ на следующие вопросы:
1. Почему мой рандом генерирует различные числа, но строками?
2. После выполнения программы вылетает ошибка (что-то о буффере), что она означает и как это исправить?
3. Как заблокировать комбинации (например Ctrl+C) клавиш и вообще сделать защиту от дурака?

Заранее спасибо.

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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
 
int main(){
    int range=100, min=1, a, s;
    cin >> a;
    cin >> s;
    int *arr = new int[a*s];
    int *rarr =new int[a*s];
    ofstream fout("matrix.txt");
    for(int i=0; i<a; i++){
        for(int j=0; j<s; j++){
            arr[a*i+s]=rand() % (range+1) + min;
            
        }
    }
    for(int i=0; i<a; i++){
        for(int j=0; j<s; j++){
             fout << arr[a*i+s] << " ";
             if(j==(a-1)){
                 fout<< endl;
             }
            
        }
    }
    ifstream fin("matrix.txt");
 
 
 
    for(int i=0; i<a; i++){
        for(int j=0; j<s; j++){
              char buf[5];
              fin >> buf;
              rarr[i*a+s]=atoi(buf);
              cout << rarr[i*a+s] << " ";
              if(j==s-1){
                 cout << endl;
              }
         }
    }
 
    delete []arr;
    delete []rarr;
    fin.close();
    cout << endl;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение и вывод массива из файла (C++):

Чтение символьного массива из файла и вывод на экран - C++
Задание было: прочитать из файла символьный массив и обработать его. Т.к. нам чтение из файла пока не давали, пришлось искать самому. ...

Чтение из файла и вывод на экран - C++
Помогите разобраться: 1)Чтение из файла Программа должна выводить на экран данные сохраненные ею же в формате .txt, у меня не...

Чтение и вывод информации из файла - C++
Имеется текстовый файл zarplaty.txt. Необходимо вывести содержимое файла на экран в консоль.(объясните ещё как с русским языком обстоит...

Чтение чисел из файла, сортировка и вывод - C++
написать 4 функции, сортирующие массив целых чисел 4 способами: - методом пузырька - методом вставки - методом выбора - быстрая...

Чтение строки из файла дает неправильный вывод - C++
Добрый день! Вопрос такой, код работает неправильно. Смысл такой: читаем строку. Если первый симол строки такой-то, вывести единицу....

Чтение из файла STL (файловый ввод/вывод) - C++
В чем проблема? map.ccp void Map::ReadFromFile(fstream&amp; F) { string s,key; int k, value, counter; map &lt;string, Pr&gt; ob; map...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
17.02.2013, 16:30 #2
Вы странным образом работаете с индексами массива.
Вы не проверяете выделилась память или открылся поток.
Вы непонятно зачем используете буфер, поток и без вас прекрасно справится с такой задачей.
Вы интерпретируете двумерный массив, как одномерный, можно обойтись одним индексом.
И еще хорошо-бы поставить проверку от дурака при чтении из файла, т.к., если там окажется хотя бы одно число, поток заморозится.
И еще, для экономии места совершенно спокойно можно писать данные в двоичный файл.
И еще, вы не сбрасываете СЧ, поэтому при каждом пуске будут одинаковые числа.
И еще, это программирование на Ц с плюсами, вам тут многие скажут, на С++ нужно использовать возможности С++, те же стандартные контейнеры, алгоритмы и прочее.
Ну и напоследок, ту не мешалобы подключить нормальную обработку исключений через try..catch.
Немного подправил.

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
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
int main() {
    int range = 100, min = 1, a, s;
    cin >> a; // если это строки
    cin >> s; // если это столбцы
    int *arr = new int[a * s];
    int *rarr = new int[a * s];
    if (arr == NULL || rarr == NULL) {
        cerr << "low memory foe array";
        exit(1);
    }
    ofstream fout("matrix.txt");
    if (!fout.is_open()) {
        cerr << "file not found";
        exit(1); // exit with code 1;
    };
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < s; j++) {
            // то перебор элементов делается так
            arr[i * s + j] = rand() % (range + 1) + min;
            cout << setw(5) << arr[i * s + j];
        }
        cout << endl;
    }
    cout << endl;
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < s; j++) {
            fout << arr[i * s + j] << " ";
        }
        fout << endl;
    }
    ifstream fin("matrix.txt");
    // в вашем случае буфер не нужен
 
    if (!fin.is_open()) {
        cerr << "file not found";
        exit(1); // exit with code 1;
    };
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < s; j++) {
            fin >> rarr[i * s + j];
            cout << setw(5) << rarr[i * s + j];
        }
        cout << endl;
    }
    delete[] arr;
    delete[] rarr;
    fin.close();
    cout << endl;
//system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 16:30
Привет! Вот еще темы с ответами:

Чтение файла и вывод его содержимого на экран - C++
помогите разобраться с чтением файла и выводом его содержимого на экран... а то что ни как не получается... запутался... :wall:

Чтение файла в кодировке utf-8 и вывод в консоль - C++
Здорова! Пытаюсь прочитать файл в кодировке utf-8 (вот он ) и вывожу его в консоль, ничего не получается. Вот код: #include...

Вывод в файл и последующее чтение из файла объектов класса - C++
Как наиболее правильно и канонично выводить (так чтобы потом ещё и прочитать) объекты классов в файл? Представим ситуацию: Есть класс...

Добавить вывод в файл и чтение из файла объектов класса - C++
Добавить вывод в файл и чтение из файла объектов класса. Работа должна отображаться на мониторе. Прошу не много подсабить. #include...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru