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