Код не компилируется - C (СИ) (149830)
Формулировка задачи:
#include <stdio.h> #include <string.h> #include<conio.h> #include <malloc.h> #include <locale.h> #define FILE_NAME_MAX_SIZE 64 int** readMatrixFromFile(char* fileName, int* m, int* n) { FILE* file = fopen(fileName, "rt"); if (!file) return 0; fscanf(file, "%d", m); fscanf(file, "%d", n); int** matrix = malloc(sizeof(int*) * *m); int i = 0; int j = 0; for (i = 0; i < *m; i++) { matrix[i] = malloc(sizeof(int) * *n); for (j = 0; j < *n; j++) fscanf(file, "%d", &matrix[i][j]); } fclose(file); return matrix; } int writeMatrixToFile(char* fileName, int** matrix, int m, int n) { FILE* file = fopen(fileName, "wt"); if (!file) return 1; fprintf(file, "%d %d\n", m, n); int i = 0; int j = 0; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) fprintf(file, "%d ", matrix[i][j]); fprintf(file, "\n"); } fclose(file); return 0; } void findMaxInMatrix(int** matrix, int m, int n, int* indexI, int* indexJ) { int i = *indexI = 0; int j = *indexJ = 0; for (i = 0 ; i < m; i++) for (j = 0 ; j < n; j++) if (matrix[i][j] > matrix[*indexI][*indexJ]) { *indexI = i; *indexJ = j; } } void processMatrix(int*** matrix, int m, int n) { int i = 0; int j = 0; int indexI = 0; int indexJ = 0; findMaxInMatrix(*matrix, m, n, &indexI, &indexJ); for (i = 0 ; i < m; i++) for (j = 0 ; j < n; j++) if ((*matrix)[i][j] % 7 == 0) (*matrix)[i][j] = (*matrix)[indexI][indexJ]; } int printFile(char* fileName) { FILE* file = fopen(fileName, "rt"); if (!file) return 1; int m, n; fscanf(file, "%d", &m); fscanf(file, "%d", &m); char c = 0; int i = 0; int j = 0; int currentElement; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { fscanf(file, "%d", ¤tElement); printf("%5d", currentElement); } printf("\n"); } fclose(file); return 0; } int main(int argc, char * argv[]) { setlocale(LC_ALL, "Rus"); char fileName[FILE_NAME_MAX_SIZE]; char newFileName[] = "123.txt"; if (argc == 1) { printf("Введите имя файла:\n> "); gets(fileName); } else strcpy(fileName, argv[1]); int** matrix; int m = 0; int n = 0; if ((matrix = readMatrixFromFile(fileName, &m, &n)) == 0) { printf("Не удалось считать матрицу из файла!\n"); getch(); return 1; } processMatrix(&matrix, m, n); if (writeMatrixToFile(newFileName, matrix, m, n)) { printf("Не удалось записать матрицу в файл!\n"); getch(); return 1; } if (printFile(newFileName)) { printf("Не удалось вывести файл на экран!\n"); getch(); return 1; } getch(); return 0; }
Решение задачи: «Код не компилируется»
textual
Листинг программы
int printFile(char* fileName) { FILE* file = fopen(fileName, "rt"); if (!file) return 1; int m, n; fscanf(file, "%d", &m); // Считываешь m fscanf(file, "%d", &m); // и ещё раз считываешь m char c = 0; int i = 0; int j = 0; int currentElement; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { fscanf(file, "%d", ¤tElement); printf("%5d", currentElement); } printf("\n"); } fclose(file); return 0; }
Объяснение кода листинга программы
В данном коде происходит попытка прочитать и распечатать файл, содержащий двумерный массив целых чисел. Код имеет следующий порядок действий:
- Входные данные:
- fileName - имя файла, который необходимо распечатать
- Первые два действия кода:
- Открытие файла с помощью функции fopen()
- Проверка на успешное открытие файла
- Если файл успешно открыт, то код продолжает работу, иначе возвращает 1 и завершает выполнение
- Следующие три действия кода:
- Объявление трех переменных типа int: m, n, currentElement
- Объявление трех переменных типа char: c, j, k
- Чтение первых двух строк массива с помощью функции fscanf()
- Следующие действия кода:
- Организация вложенного цикла для перебора каждого элемента массива
- Чтение каждого элемента массива с помощью функции fscanf()
- Печать каждого элемента массива с помощью функции printf()
- Завершение работы программы:
- Закрытие файла с помощью функции fclose()
- Возврат 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д