을 실행하려고 할 때 중지 :프로그램은 컴파일하지만 나는 다음과 같은 코드를 작성했습니다
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
struct address
{
char street[18];
char city[13];
char state[7];
char zip[5];
};
struct student
{
char first_name[7];
char initial;
char last_name[9];
struct address add;
int age;
double gpa;
};
void readData(struct student students[], int *n);
void print(struct student students[], int n);
void bestGPA(struct student students[], int n);
double averageGPA(struct student students[], int n);
void printAboveGPA(struct student students[], int n, double avg);
void youngestStudent(struct student students[], int n, double avg);
void sort(struct student students[], int n);
int main()
{
struct student students[20];
int n=0;
readData(students, &n);
print(students, n);
bestGPA(students, n);
double avg = averageGPA(students, n);
printf("Average GPA is: %.2lf\n", avg);
printAboveGPA(students, n, avg);
youngestStudent(students, n, avg);
sort(students, n);
printf("\nNow sorted based on GPA: \n");
print(students, n);
return 0;
}
void readData(struct student students[], int *d)
{
int n = 0;
FILE *fp;
fp = fopen("Students.dat", "r");
if(fp == NULL) {
printf("Students.dat file not found.\n");
exit(1);
}
else
{
while(fscanf(fp, "%s %c %s",
students[n].first_name,
&students[n].initial,
students[n].last_name) == 3)
{
char add1[10], add2[10], add3[10];
fscanf(fp, "%s %s %s", add1, add2, add3);
strcpy(students[n].add.street, add1);
strcat(students[n].add.street, " ");
strcat(students[n].add.street, add2);
strcat(students[n].add.street, " ");
strcat(students[n].add.street, add3);
fscanf(fp, "%s %s %s %d %lf", students[n].add.city, students[n].add.state, students[n].add.zip,&students[n].age, &students[n].gpa);
n++;
}
}
*d = n;
}
void print(struct student students[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("%s %c %s %s %s %s %s %d %.2lf\n"
, students[i].first_name
, students[i].initial
, students[i].last_name
,students[i].add.street
,students[i].add.city
,students[i].add.state
,students[i].add.zip
,students[i].age
,students[i].gpa);
}
}
void bestGPA(struct student students[], int n)
{
struct student s = students[0];
int bestGPAIndex = 0;
int i;
for(i=1; i<n; i++)
{
if(students[bestGPAIndex].gpa < students[i].gpa)
{
bestGPAIndex = i;
}
}
printf("\n\nThe student with best GPA is: %c %s %s\n\n", students[bestGPAIndex].initial, students[bestGPAIndex].first_name,students[bestGPAIndex].last_name);
}
double averageGPA(struct student students[], int n)
{
int i;
double total;
double avg;
for(i=0; i<n; i++)
{
total += students[i].gpa;
}
avg = total/n;
return avg;
}
void printAboveGPA(struct student students[], int n, double avg)
{
int i;
printf("\nStudents with GPA more than average: \n");
for(i=0; i<n; i++)
{
if(students[i].gpa > avg)
{
printf("%c %s %s\n", students[i].initial, students[i].first_name, students[i].last_name);
}
}
}
void youngestStudent(struct student students[], int n, double avg)
{
int i;
printf("\nYoungest student with GPA less than average: ");
int youngestStudentIndex=students[0].age;
int isFound = 0;
for(i=0; i<n; i++)
{
if(students[i].gpa < avg)
{
if(!isFound)
{
isFound = 1;
youngestStudentIndex = i;
}
if(students[youngestStudentIndex].age >= students[i].age)
{
youngestStudentIndex = i;
}
}
}
if(isFound)
printf("%c %s %s\n\n", students[youngestStudentIndex].initial, students[youngestStudentIndex].first_name, students[youngestStudentIndex].last_name);
else
printf("Not found !!\n\n");
}
void sort(struct student students[], int n)
{
int i,j;
for (i = 0 ; i < (n - 1); i++)
{
for (j = 0 ; j < n - i - 1; j++)
{
if (students[j].gpa > students[j+1].gpa)
{
struct student s = students[j];
students[j] = students[j+1];
students[j+1] = s;
}
}
}
}
내가 할 모든 students.exe 내가 실행에 갈 때 작동이 중지되었습니다 때문이다. Visual Studio에서 디버깅하려고하면 "unhandled exception at 0x76F3D062 (ntdll.dll) in test.exe : 0xC0000005 : 액세스 위반 작성 위치 0x7504006D"라는 메시지가 나타납니다. 솔직히, 나는 그것이 무엇을 의미하는지 정말로 모른다. CodeLite를 IDE로 사용하여 프로그램을 개발하고 있습니다. 문제가있는 부분에 대한 도움이나 힌트를 주시면 감사하겠습니다. 고맙습니다!
http://stackoverflow.com/help/mcve –
그러나 그 원인으로 프로그램이 작동하지 않습니까? 또한 거리 배열을 더 크게 만들 수는 없습니까? 그렇게해도 문제가 해결되지는 않습니다. – user3727648
입력 파일 (Students.dat)이 어떻게 보이는지 ... 아마도 스 니펫입니다. 해당 파일의 특정 줄을 읽으면 프로그램이 항상 종료됩니까? – TonyB