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

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

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

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

17.02.2013, 11:53. Просмотров 497. Ответов 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++ Чтение массива из файла
C++ Вывод в файл и последующее чтение из файла объектов класса
Чтение массива из файла C++
Чтение строки из файла дает неправильный вывод C++
Чтение из файла и вывод на экран C++
C++ Чтение символьного массива из файла и вывод на экран
C++ Чтение файла в кодировке utf-8 и вывод в консоль
Чтение из файла STL (файловый ввод/вывод) C++
Добавить вывод в файл и чтение из файла объектов класса C++
C++ Чтение текста из файла и вывод на экран предложений без запятых

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
Yandex
Объявления
17.02.2013, 16:30     Чтение и вывод массива из файла
Ответ Создать тему
Опции темы

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