Программа не работает на Windows 7 - C (СИ)
Формулировка задачи:
при ns 3 программа нормально работала, как только поменял 3 на 7 Windows выдает ошибку. помогите, пожалуйста,исправить.
#include<stdio.h>
#include<conio.h>
#define ns 7
#define nfio 15
typedef struct
{
int day, month,year;
}date;
typedef struct
{
char fio[nfio], pol, obr, address, stip;
date dater;
int kb;
float ocen[5],sum;
}stud;
int main()
{
stud group[ns], group1[ns],group2[ns];
int i,j,sizest,*n;
float sumgr,balgr;
FILE *fp;
char *filename="D:\\student\\proba.txt";
sizest=sizeof(group);
if((fp=fopen( filename,"w"))==NULL)
{
printf("Oshibka");
getch();
return 0;
}
printf("File otkrit dlya vvoda dannix\n");
for(i=0;i<=ns-1;i++)
{
printf("Vvedite dannye o studente\n");
scanf("%s %c %c %c %c %i %i %i",group[i].fio,&group[i].pol,
&group[i].obr,&group[i].address,&group[i].stip,&group[i].dater.day,
&group[i].dater.month,&group[i].dater.year);
printf("Vvedite ocenki i kol-vo ballov:\n");
for(j=0;j<=4;j++) scanf("%f",&group[i].ocen[j]);
scanf("%i",&group[i].kb);
}
for(i=0;i<=ns-1;i++)
fwrite(&group,sizest,3,fp);
printf("OK");
fclose(fp);
if((fp=fopen(filename,"r"))==NULL)
{
printf("Oshibka");
getch();
return 0;
}
sumgr=0;
printf("Dannye iz fila:\n");
fread(&group1,sizest,3,fp);
*n=0;
for (i=0;i<=ns-1;i++)
{
group1[i].sum=0;
for (j=0;j<5;j++) group1[i].sum+=group1[i].ocen[j];
sumgr=sumgr+group1[i].sum;
group2[*n]=group1[i];
*n=*n+1;}
for (i=0;i<=ns-1;i++)
{
printf("%s %c %c %c %c %i%i%i",group1[i].fio,group1[i].pol,
group1[i].obr,group1[i].address,group1[i].stip,group1[i].dater.day,
group1[i].dater.month,group1[i].dater.year);
for(j=0;j<=4;j++) printf("%f",group1[i].ocen[j]);
printf("%i\n",group1[i].kb);
}
balgr=sumgr/(ns*5);
printf("sredni ball gruppi %f\n",balgr);
printf("kolichestvo zapisei %i",*n);
fclose(fp);
getch();
return 0;
}Решение задачи: «Программа не работает на Windows 7»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#define ns 7
#define nfio 15
typedef struct
{
int day, month, year;
} date;
typedef struct
{
char fio[nfio], pol, obr, address, stip;
date dater;
int kb;
float ocen[5], sum;
} stud;
int main()
{
stud group[ns], group1[ns];
int i, j, sizest, n;
float sumgr, balgr;
FILE* fp;
char* filename = "proba.txt";
sizest = sizeof(stud);
if ((fp = fopen(filename, "wb")) == NULL)
{
printf("Oshibka");
getch();
return 0;
}
printf("File otkrit dlya vvoda dannix\n");
for (i = 0; i < ns; i++)
{
printf("Vvedite dannye o studente\n");
scanf("%s %c %c %c %c %i %i %i", group[i].fio, &group[i].pol,
&group[i].obr, &group[i].address, &group[i].stip, &group[i].dater.day,
&group[i].dater.month, &group[i].dater.year);
printf("Vvedite ocenki i kol-vo ballov:\n");
for (j = 0; j < 5; j++)
{
scanf("%f", &group[i].ocen[j]);
}
scanf("%i", &group[i].kb);
}
fwrite(&group, sizest, ns, fp);
printf("OK");
fclose(fp);
if ((fp = fopen(filename, "rb")) == NULL)
{
printf("Oshibka");
getch();
return 0;
}
sumgr = 0;
printf("Dannye iz fila:\n");
fread(&group1, sizest, ns, fp);
n = 0;
for (i = 0; i < ns; i++)
{
group1[i].sum = 0;
for (j = 0; j < 5; j++)
{
group1[i].sum += group1[i].ocen[j];
}
sumgr = sumgr + group1[i].sum;
n++;
}
for (i = 0; i < ns; i++)
{
printf("%s %c %c %c %c %i%i%i ", group1[i].fio, group1[i].pol,
group1[i].obr, group1[i].address, group1[i].stip, group1[i].dater.day,
group1[i].dater.month, group1[i].dater.year);
for (j = 0; j < 5; j++)
{
printf("%.1f ", group1[i].ocen[j]);
}
printf("%i\n", group1[i].kb);
}
balgr = sumgr / (ns * 5);
printf("sredni ball gruppi %f\n", balgr);
printf("kolichestvo zapisei %i", n);
fclose(fp);
getch();
return 0;
}
Объяснение кода листинга программы
- Представлен код на языке C.
- Задача программы - работа с файлом, содержащим данные о студентах.
- Код открывает файл
proba.txtдля записи данных (режимwb). - В цикле запрашиваются и записываются данные о каждом студенте: ФИО, пол, курс, адрес, специальность, дата рождения, количество баллов и средний балл.
- Затем код открывает файл
proba.txtдля чтения данных (режимrb). - В цикле выводятся данные о каждом студенте, включая ФИО, пол, курс, адрес, специальность, дату рождения, количество баллов.
- Вычисляется средний балл группы.
- Закрывается файл
proba.txt. - В коде используется тип данных
dateдля хранения даты рождения студента. - Используется оператор
getch()для приостановки выполнения программы и вывода сообщенияOK. - В коде используется библиотека
stdio.hдля ввода-вывода данных. - В коде используется библиотека
conio.hдля работы с клавиатурой и приостановки выполнения программы. - Используется оператор
scanf()для ввода данных о студенте. - Используется оператор
printf()для вывода данных на экран. - В коде используются переменные
nsиnfioдля определения размера массивов. - В коде используется тип данных
charдля хранения строковых значений. - В коде используется тип данных
intдля хранения целочисленных значений. - В коде используется тип данных
floatдля хранения числовых значений. - Используется функция
fopen()для открытия файла. - Используется функция
fclose()для закрытия файла. - Используется функция
fread()для чтения данных из файла. - Используется функция
fwrite()для записи данных в файл.