Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ создание двумерного массива http://www.cyberforum.ru/cpp-beginners/thread788179.html
поскажите плиз почему массив не выводится как положено.. (про библиотеки я знаю) #include "stdafx.h" #include <iostream> #include <ctime> #include <cstdlib> #include <stdio.h> #include...
C++ Удалить из числа вхождение первой цифры Нужно из числа удалить все вхождения первой цифры. Например в числе 123123 первая цифра = 1, мы удаляем её и её вхождения в число и получаем в итоге число 2323. Всё бы хорошо, но хотят чтобы... http://www.cyberforum.ru/cpp-beginners/thread788177.html
C++ Удаление символов из строки
Условие: Даны натуральное число N, символы s1,...,sn. Удалить из данной последовательности все группы букв вида abcd. Я начинающий программист, вот что у меня получилось: #include <iostream>...
C++ Защита от дурака. Разбор кода
всем здравствуйте. Прошу помощи. такова ситуация, есть код защиты от ввода букв и отбрасывания пробелов, но не могу разобраться, он не мой. помогите разобраться. float zashita() { char si;...
C++ Возврат значения С++ http://www.cyberforum.ru/cpp-beginners/thread788159.html
Hi people! Вот такое задание: 1) Реализовать заданную динамическую структуру данных, с которой можно работать через перегруженные операции. 2) Для демонстрации работы программы необходимо...
C++ Указателю на базовый класс присвоить адрес производного класса class Point { public: Point(float a=0, float b=0) { x=a; y=b; } protected: float x; float y; }; подробнее

Показать сообщение отдельно
vua72
416 / 416 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
17.02.2013, 16:30
Вы странным образом работаете с индексами массива.
Вы не проверяете выделилась память или открылся поток.
Вы непонятно зачем используете буфер, поток и без вас прекрасно справится с такой задачей.
Вы интерпретируете двумерный массив, как одномерный, можно обойтись одним индексом.
И еще хорошо-бы поставить проверку от дурака при чтении из файла, т.к., если там окажется хотя бы одно число, поток заморозится.
И еще, для экономии места совершенно спокойно можно писать данные в двоичный файл.
И еще, вы не сбрасываете СЧ, поэтому при каждом пуске будут одинаковые числа.
И еще, это программирование на Ц с плюсами, вам тут многие скажут, на С++ нужно использовать возможности С++, те же стандартные контейнеры, алгоритмы и прочее.
Ну и напоследок, ту не мешалобы подключить нормальную обработку исключений через 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;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru