Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Naz17
6 / 3 / 4
Регистрация: 10.12.2017
Сообщений: 86
1

Запись из файла в двумерный массив

06.11.2018, 23:50. Просмотров 855. Ответов 5
Метки нет (Все метки)

Доброго времени суток, у меня стояла задача: Создан файл, в него записать числа от 0 до 255, потом считать их и записать в двумерный массив, а потом если меньше 128 переписать на 0, если больше - заменить на 1.
Запускается сама программа без ошибок, но не работает, и не знаю в чём проблема.
Надеюсь на ваши подсказки.
Заранее спасибо!
Вот код:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
 
#define H 7
#define W 7
int mas[H][W];
int pix;
 
 
void random(const char *fname) {
    srand((unsigned)time(NULL));
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "w");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
        return;
    }
 
    for (int i = 0; i <= H*W; i++) { 
        pix = 0 + rand() % 256;
        fprintf(fp, "%d", pix);
    }
    fclose(fp);
}
 
void form(int mas[][H], const char *fname) {
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
        return;
    }
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            fscanf(fp, "%d", &mas[i][j]);
        }
    }
    fclose(fp);
}
 
int toFillArray(void) {
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
    }
    printf("Before:\n");
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            fprintf(fp, "%d", mas[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            mas[i][j] >>= 7; 
        }
    }
    printf("\nAfter:\n");
    for (int i = 0; i < H; i++ ) { 
        for (int j = 0; j < W; j++ ) {
            fprintf(fp, "%d", mas[i][j]); 
        }
        printf("\n");
    }
    fclose(fp);
    return 0;
}
int main() {
    printf("%u",toFillArray());
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2018, 23:50
Ответы с готовыми решениями:

Как правильно считать двумерный массив из файла
Не получается считать двумерный массив из файла, часть элементов масива заменяются на нули....

Считать данные с файла и занести их последовательно в двумерный массив
Здравствуйте. Возник следующий вопрос: мне нужно считать данные с файла и занести их...

Считывание из строки файла в двумерный массив, пустые значения
Неправильно считываются числа: первое считывается нормально, остальные получают пустое значение...

Двумерный массив, ввод чисел должен быть с текстового файла
ввод чисел с текстового файла)

Считать двумерный массив из файла и найти максимум в каждой строке
Надо реализовать программу, которая будет считывать двумерный массив из файла и найти максимум в...

5
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
07.11.2018, 00:34 2
Лучший ответ Сообщение было отмечено Naz17 как решение

Решение

наверно должно быть так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fprintf(fp, " %d", pix);
//с пробелом,  в функции random()
// 
 
printf(" %d", mas[i][j]);
// два раза вместо  fprintf(fp, "%d", mas[i][j]); в функции toFillArray()
 
 
fp = fopen(fn, "r");
// вместо   fopen(fn, "r"); во всех трёх функциях
 
//и что-то такое
 int main() {
    f_random("pixel.txt");
    form(mas, "pixel.txt");
    printf("%u",toFillArray());
    return 0;
}
// имя random() компилятор не понял, менял на f_random
и непонятно зачем в функции передаётся имя если оно никак не используется
1
Naz17
6 / 3 / 4
Регистрация: 10.12.2017
Сообщений: 86
07.11.2018, 00:38  [ТС] 3
ft4l, Спасибо!
0
Naz17
6 / 3 / 4
Регистрация: 10.12.2017
Сообщений: 86
07.11.2018, 15:05  [ТС] 4
ft4l, Переделал, но всё равно не работает
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // Заголовний файл для функції rand().
 
#define H 7
#define W 7
int mas[H][W];
int pix;
 
 
void random(const char *fname) { //передаємо ім'я файлу, наприклад "test.txt"
    srand((unsigned)time(NULL));
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "w");
 
    if (fp == NULL) {
        printf("Файл %s не знайдено\n", fn);
        return;
    }
 
    for (int i = 0; i <= H*W; i++) { //розміри зображення
        pix = 0 + rand() % 256; //для генерації матриці 0 або 1: 0 + rand() % 2
        fprintf(fp, " %d", pix);
    }
    fclose(fp);
}
 
void form(int mas[][H], const char *fname) {
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не знайдено\n", fn);
        return;
    }
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            fscanf(fp, "%d", &mas[i][j]);
        }
    }
    fclose(fp);
}
 
int toFillArray(void) {
    FILE *fp;
    char *fn = "pixel.txt";
    fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не знайдено\n", fn);
    }
    printf("Before:\n");
    for (int i = 0; i < H; i++ ) { //Рядок 18-22 - вивід масиву на екран.
        for (int j = 0; j < W; j++ ) {
            printf(" %d", mas[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            mas[i][j] >>= 7; //Побітовий зсув вправо.
        }
    }
    printf("\nAfter:\n");
    for (int i = 0; i < H; i++ ) { //Рядок 30-34 вивід масиву нових значень на екран.
        for (int j = 0; j < W; j++ ) {
            printf(" %d", mas[i][j]); 
        }
        printf("\n");
    }
    fclose(fp);
    return 0;
}
int main() {
    random("pixel.txt");
    form(mas, "pixel.txt");
    printf("%u",toFillArray());
    return 0;
}
0
ft4l
Невнимательный
252 / 215 / 91
Регистрация: 08.02.2013
Сообщений: 641
Записей в блоге: 1
07.11.2018, 17:22 5
Цитата Сообщение от ft4l Посмотреть сообщение
fp = fopen(fn, "r"); // вместо fopen(fn, "r"); во всех трёх функциях
забыли это

И как я говорил, зачем делать
void form(int mas[][H], const char *fname)
void f_random(const char *fname)

если mas и так видно из всех трёх функциях
и fname никак не используются, вместо них используются char *fn = "pixel.txt";
во всех 3-х функциях
1
Naz17
6 / 3 / 4
Регистрация: 10.12.2017
Сообщений: 86
07.11.2018, 20:08  [ТС] 6
ft4l, Спасибо теперь всё работает.
Если кому-то интересно, вот конечный результат:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define H 7
#define W 7
int mas[H][W];
int pix;
 
 
void random() {
    srand((unsigned)time(NULL));
    FILE *fp;
    char *fn = "pixel.txt";
    fp = fopen(fn, "w");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
        return;
    }
 
    for (int i = 0; i <= H*W; i++) { 
        pix = 0 + rand() % 256;
        fprintf(fp, " %d", pix);
    }
    fclose(fp);
}
 
void form() {
    FILE *fp;
    char *fn = "pixel.txt";
    fp = fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
        return;
    }
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            fscanf(fp, "%d", &mas[i][j]);
        }
    }
    fclose(fp);
}
 
int toFillArray(void) {
    FILE *fp;
    char *fn = "pixel.txt";
    fp = fopen(fn, "r");
 
    if (fp == NULL) {
        printf("Файл %s не найдено\n", fn);
    }
    printf("Before:\n");
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            printf(" %d", mas[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            mas[i][j] >>= 7;
        }
    }
    printf("\nAfter:\n");
    for (int i = 0; i < H; i++ ) {
        for (int j = 0; j < W; j++ ) {
            printf(" %d", mas[i][j]); 
        }
        printf("\n");
    }
    fclose(fp);
    return 0;
}
int main() {
    random("pixel.txt");
    form(mas, "pixel.txt");
    printf("%u",toFillArray());
    return 0;
}
0
07.11.2018, 20:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2018, 20:08

Запись в динамический массив с файла
Здравствуйте, выдаёт ошибку при считывания с файла, прошу указать на ошибку в коде....

Запись в массив wchar_t из файла
Помогите пожалуйста разобраться, мне нужно считать файл на русском языке. При чтении русских...

Запись строк из файла в массив
Просмотрел аналогичные вопросы - все не то! Задача проста как два пальца. Но что то у меня не...


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

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

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