Debug assertion failed! - C (СИ)
Формулировка задачи:
Здравствуйте, такая проблема. Пишу программу: Для двух файлов А и В, которые состоят из 20 элементов: А={ai}, B={bi} i=[1,20] необходимо рассчитать значение сi=((ai+bi)+56)/(ai+5)2 и записать его в файл С={ci}.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
#include <cstdio>
#include <conio.h>
#define N 20
int main()
{
void view_file(FILE* file);
srand(time(NULL));
setlocale(LC_ALL, "rus");
FILE *file1, *file2, *file3;
file1 = fopen("file1.txt", "rt");
file2 = fopen("file2.txt", "rt");
file3 = fopen("file3.txt", "rt");
double random;
for (int i(0); i < N; ++i);
{
random = rand() % 100 + 101;
fwrite(&random, sizeof(double), 1, file1);
random = rand() % 100 + 1;
fwrite(&random, sizeof(double), 1, file2);
}
rewind(file1);
rewind(file2);
int a, b, c;
for (int i(0); i < N; ++i);
{
fwrite(&a, sizeof(double), 1, file1);
fwrite(&b, sizeof(double), 1, file2);
c = ((a / b) + 56) / (a + 5) ^ 2;
fwrite(&c, sizeof(double), 1, file3);
}
rewind(file1);
rewind(file2);
rewind(file3);
//std :: cout << std::endl << "First file: ";
//view_file(file1); std::cout << std::endl;
//std:: cout << std::endl << "Cesond file: ";
//view_file(file2); std::cout << std::endl;
//cout << endl << "Third file: ";
_getch();
return 0;
}Решение задачи: «Debug assertion failed!»
textual
Листинг программы
fclose(file1);
fclose(file2);
fclose(file3);
file1 = fopen("file1.txt", "rb");
for (i=0; i < N; ++i)
{
fread(&a, sizeof(double), 1, file1);
printf(" %lf\n",a);
}
fclose(file1);
file2 = fopen("file2.txt", "rb");
for (i=0; i < N; ++i)
{
fread(&a, sizeof(double), 1, file2);
printf(" %lf\n",a);
}
fclose(file2);
file3 = fopen("file3.txt", "rb");
for (i=0; i < N; ++i)
{
fread(&a, sizeof(double), 1, file3);
printf(" %lf\n",a);
}
fclose(file3);
Объяснение кода листинга программы
В данном коде происходит чтение из трёх файлов (file1.txt, file2.txt, file3.txt) и вывод содержимого на экран. Код открывает каждый файл в режиме чтения (rb), считывает из него один double и выводит его на экран. При этом используется цикл for для считывания всех N строк из каждого файла.
- fclose(file1); — закрывает файл file1.
- fclose(file2); — закрывает файл file2.
- fclose(file3); — закрывает файл file3.
- file1 = fopen(
file1.txt,rb); — открывает файл file1.txt в режиме чтения (rb). - for (i=0; i < N; ++i) — начинается цикл for для считывания N строк.
- fread(&a, sizeof(double), 1, file1); — считывает из файла одну строку (double) в переменную a.
- printf(
%lf\n,a); — выводит содержимое переменной a на экран. - fclose(file1); — закрывает файл file1.
- file2 = fopen(
file2.txt,rb); — открывает файл file2.txt в режиме чтения (rb). - for (i=0; i < N; ++i) — начинается цикл for для считывания N строк.
- fread(&a, sizeof(double), 1, file2); — считывает из файла одну строку (double) в переменную a.
- printf(
%lf\n,a); — выводит содержимое переменной a на экран. - fclose(file2); — закрывает файл file2.
- file3 = fopen(
file3.txt,rb); — открывает файл file3.txt в режиме чтения (rb). - for (i=0; i < N; ++i) — начинается цикл for для считывания N строк.
- fread(&a, sizeof(double), 1, file3); — считывает из файла одну строку (double) в переменную a.
- printf(
%lf\n,a); — выводит содержимое переменной a на экран. - fclose(file3); — закрывает файл file3. Данный код вполне корректен, если все три файла существуют, открываются без ошибок и содержат по N строк с double. Если какое-то из этих условий не выполняется, код может выдавать ошибки. Также возможно, что код может выдавать ошибку Debug assertion failed!, если в процессе выполнения программы не были выполнены какие-то проверки на правильность работы кода.