Код не компилируется - 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, что означает успешное выполнение программы