Я довольно новичок в программировании с базовыми знаниями в C & C++. Я пытался запустить код в моем .dat-файле, который я использую для анализа изображений.file.exe прекратил работать
В основном этот .dat-файл имеет x & y положения кластеров вместе с их радиусом. С помощью этого кода я пытаюсь разделить мое изображение (размером 200 мм х 300 мм по размеру, после масштабирования пикселей) в сетки размером 5 мм x 5 мм и найти количество точек с радиусом = 1 и количеством точек с радиусом = 100.
Вот мой код:
#include<stdio.h>
int main()
{
int i=0,g,h,ng[350][250],ns[350][250],ntot[350][250];
float a[6001],b[6001],c[6001];
FILE *fres1, *fres2;
for(g=5;g<=350;g=g+5)
{
for(h=5;h<=250;h=h+5)
{
ng[g][h]=0;
ns[g][h]=0;
ntot[g][h]=0;
}
}
fres1 = fopen("trial_final_1.dat","r+");
fres2 = fopen("result_boxes.dat","w");
if(fres1 == NULL)
{
printf("Error!! Cannot open file \n");
return 1;
}
else
{
printf("File opened successfully, kindly check your folder for result_boxes file :) \n");
fprintf(fres2,"x(mm) y(mm) no. of glass beads no. of stain-less steel balls total no. of balls \n");
while(!feof(fres1))
{
fscanf(fres1,"%f %f %f",&a[i],&b[i],&c[i]);
g = ((a[i]/5) + 1)*5;
h = ((b[i]/5) + 1)*5;
if(c[i] == 100)
{
ng[g][h] = ng[g][h]+1;
}
else
{
ns[g][h] = ns[g][h] + 1;
}
ntot[g][h] = ntot[g][h] + 1;
++i;
}
g = 5;
h = 5;
for(g=5;g<=350;g=g+5)
{
for(h=5;h<=250; h=h+5)
{
fprintf(fres2,"%d %d %d %d %d\n",g,h,ng[g][h],ns[g][h],ntot[g][h]);
}
}
}
fclose(fres1);
fclose(fres2);
return 0;
}
Мой вход .dat файл (т.е. 'trial_final_1.dat') содержит данные, как:
150.505951 0.797619 100.000000
172.327438 5.976130 100.000000
137.538651 11.089217 100.000000
151.304276 10.139803 100.000000
137.008926 13.175000 100.000000
120.400734 13.943015 1.000000
136.759262 14.199074 100.000000
На мой код работает, сначала я получаю выход " Файл открыт успешно, любезно проверьте вашу папку для файла result_boxes :) », но после этого я получаю сообщение о том, что файл.exe перестает работать. Помогите мне устранить эту проблему. Я также пытался использовать while(fscanf(fres1,"%f %f %f",&a[i],&b[i],&c[i])!=EOF)
вместо while(!feof(fres1))
, но выход в обоих случаях остался прежним.
Запустите его в отладчике, чтобы вы могли видеть, где он сбой. Это означает, что вы, вероятно, использовали какую-то память, которая не принадлежит вам. Как и ваш файл был больше, чем 6001 элементов, которые вы выделили для a/b/c или что-то в этом роде. – xaxxon
Кроме того, имея бессмысленные имена переменных, никто не захочет читать ваш код. Потеряйте некоторые вертикальные пробелы, обрезайте части, которые не требуются для воспроизведения ошибки, дайте значимые имена переменных и обновите свой вопрос. – xaxxon
эй, я буду держать ур внушение в виду, задавая вопрос в следующий раз ..... thnx для времени ура :) – user2470358