Код не компилируется - 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", &currentElement);         
            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;
}

Объяснение кода листинга программы

В данном коде происходит попытка прочитать и распечатать файл, содержащий двумерный массив целых чисел. Код имеет следующий порядок действий:

  1. Входные данные:
    • fileName - имя файла, который необходимо распечатать
  2. Первые два действия кода:
    • Открытие файла с помощью функции fopen()
    • Проверка на успешное открытие файла
  3. Если файл успешно открыт, то код продолжает работу, иначе возвращает 1 и завершает выполнение
  4. Следующие три действия кода:
    • Объявление трех переменных типа int: m, n, currentElement
    • Объявление трех переменных типа char: c, j, k
    • Чтение первых двух строк массива с помощью функции fscanf()
  5. Следующие действия кода:
    • Организация вложенного цикла для перебора каждого элемента массива
    • Чтение каждого элемента массива с помощью функции fscanf()
    • Печать каждого элемента массива с помощью функции printf()
  6. Завершение работы программы:
    • Закрытие файла с помощью функции fclose()
    • Возврат 0, что означает успешное выполнение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5