Считываю символ с файла/потока и получаю останов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
float** input(int *n, int *m);
void sort(int n, int m, float **ar);
void output(int n, int m, float **ar);
int main()
{
    int n, m;
    float **ar;
    ar = input(&n, &m);
    printf("After input");
    sort(n, m, ar);
    printf("After sort");
    output(n, m, ar);
    _getch();
}
float** input(int *n, int *m)
{
    int i, j;
    float **a;
    FILE *base;
    printf("Error1");
    base = fopen("d.txt", "r" );
    printf("Error2");//исполняет и выдаёт останов
    fscanf(base, "%d\n", n); /*пробовал и "fscanf(base, "%d\n", &n);", хотя & не нужен, 
потому что у меня размеры массивов указатели*/
    printf("Error3");
    fscanf(base, "%d\n", m);
    printf("Error4");
    a = (float**)malloc(*n*sizeof(float*));
    for (i = 0; i < *n; i++)
        a[i] = (float*)malloc(*m * sizeof(float));
    printf("Error5");
    for (i = 0; i < *n; i++)
    {
        fscanf(base, "\n");
        for (j = 0; j < *m; j++)
        {
            fscanf(base, "%f\t", a);
        }
    }
    printf("Error6");
    fclose(base);
    printf("Error7");
    return a;
}
void sort(int n, int m, float **ar)
{
    int i, j;
    int j1, j2;
    int k;
    int p = n / 2;
    float max, min;
    min = 0;
    max = 0;
    j1 = 0;
    j2 = m;
    for (k = 0; k < p; k++)
    {
        for (i = 0; i < n; i++)
        {
            for (j = j1; j < m; j++)
            {
                if (ar[i][j] < ar[i][j + 1])
                {
                    min = ar[i][j];
                    ar[i][j] = ar[i][j + 1];
                    ar[i][j + 1]=min;
                }
            }
        }
        j1++;
        for (i = n; i < -1; i--)
        {
            for (j = j2; j < 0; j--)
            {
                if (ar[i][j] < ar[i][j + 1])
                {
                    max = ar[i][j + 1];
                    ar[i][j + 1] = ar[i][j];
                    ar[i][j] = max;
                }
            }
        }
        j2--;
    }
}
void output(int n, int m, float **ar)
{
    int i, j;
    FILE *window;
    window = fopen("d.txt", "a");
    for (i = 0; i < n; i++)
    {
        fprintf(window, "\n");
        for (j = 0; j < m; j++)
        {
            fprintf(window, "%f\t", ar[i][j]);
        }
    }
    fclose(window);
}

Решение задачи: «Считываю символ с файла/потока и получаю останов»

textual
Листинг программы
base = fopen("d.txt", "r" );
if(NULL == base) {
    puts("cant open input file");
    exit(1);
}

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

  1. Открывается файл d.txt для чтения - base = fopen(d.txt,r);
  2. Проверяется, успешно ли открылся файл. Если нет, выводится сообщение об ошибке и программа завершается - if(NULL == base) { puts(cant open input file); exit(1); }

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


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

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

12   голосов , оценка 3.917 из 5
Похожие ответы