Разделение программы на функции - C (СИ)
Формулировка задачи:
Выполнил задание для контрольной работы в универе. Все работает нормально и как надо, ТОЛЬКО попросили разделить программу на функции. Разделил, скомпилировал, запустилось, но программа не выполняет вообще ничего. Помогите найти ошибку.
Рабочая версия (не разделенная):
Не рабочая версия (разделенная):
#include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; typedef struct { char name[10]; char place[10]; int length; int area; int drain; } river; int main() { river all[100]; river max; FILE *f1; if((f1 = fopen("1.txt","r"))==NULL) { printf("error open file"); return -1; } int last; bool done; for (int i=0;i<10;i++) //иинициализация 10 рек из файла { fscanf(f1,"%s",&all[i].name); fscanf(f1,"%s",&all[i].place); fscanf(f1,"%d",&all[i].length); fscanf(f1,"%d",&all[i].area); fscanf(f1,"%d",&all[i].drain); last=i+1; } for(int i=0;i<last;i++) // вывод массива { printf("%s %s %d %d %d \n ",all[i].name,all[i].place,all[i].length,all[i].area, all[i].drain); } printf("\n"); do { printf("Vvedite zapros(?-spravka): "); char z1; scanf("%c",&z1); printf("\n"); switch(z1) { case 'e': { return(0); break; } ; case '?': { printf("n- novaya zapis \n v-vvesti zapros dlya vyvoda \n e-vyhod \n "); break; }; case 'n': { printf("Vvodi: \n Name:"); scanf("%c",&all[last].name); printf("\n Place:"); scanf("%c",&all[last].place); printf("\n Length:"); scanf("%d",&all[last].length); printf("\n Area:"); scanf("%d",&all[last].area); printf("\n Drain:"); scanf("%d",&all[last].drain); last++; break; }; case 'v': { printf("\nVyvesti vse ili parametr: "); int z2; scanf("%d",&z2); printf("\n "); int maxi=0; max = all[0]; switch(z2) { case 12: { for(int i=1;i<last;i++) { if (max.length<all[i].length) { max=all[i]; maxi=i; } else { if(max.length=all[i].length) { if (max.area<all[i].area) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 13: { for(int i=1;i<last;i++) { if (max.length<all[i].length) { max=all[i]; maxi=i; } else { if(max.length=all[i].length) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 21: { for(int i=1;i<last;i++) { if (max.area<all[i].area) { max=all[i]; maxi=i; } else { if(max.area=all[i].area) { if (max.length<all[i].length) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 23: { for(int i=1;i<last;i++) { if (max.area<all[i].area) { max=all[i]; maxi=i; } else { if(max.area=all[i].area) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 31: { for(int i=1;i<last;i++) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } else { if(max.drain=all[i].drain) { if (max.length<all[i].length) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 32: { for(int i=1;i<last;i++) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } else { if(max.drain=all[i].drain) { if (max.area<all[i].area) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",all[maxi].name,all[maxi].place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 0: { for(int i=0;i<last;i++) // вывод массива { printf("%s %s %d %d %d \n ",all[i].name,all[i].place,all[i].length,all[i].area, all[i].drain); } printf("\n"); break; } } break; }; default: { printf("Oshibka\n\n"); break; }; } }while(!done); }
#include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; typedef struct { char *name; char *place; int length; int area; int drain; } river; int print(river *, int); int zaprosik(bool, int); int caseN(river *, int); int caseV(river *, int); int print(river *all, int last) { for(int i=0;i<last;i++) // вывод массива { printf("%s %s %d %d %d \n ",(all+i)->name,(all+i)->place,all[i].length,all[i].area, all[i].drain); } printf("\n"); } int zaprosik(bool done, int last) { do { printf("Vvedite zapros(?-spravka): "); char z1; scanf("%c",&z1); printf("\n"); switch(z1) { case 'e': { return(0); break; } ; case '?': { printf("n- novaya zapis \n v-vvesti zapros dlya vyvoda \n e-vyhod \n "); break; }; case 'n': { int caseN; break; }; case 'v': { int caseV; break; }; default: { printf("Oshibka\n\n"); break; }; } }while(!done); } int caseN(river *all, int last) { printf("Vvodi: \n Name:"); scanf("%c",&(all+last)->name); printf("\n Place:"); scanf("%c",&(all+last)->place); printf("\n Length:"); scanf("%d",&all[last].length); printf("\n Area:"); scanf("%d",&all[last].area); printf("\n Drain:"); scanf("%d",&all[last].drain); last++; } int caseV(river *all, int last) { printf("\nVyvesti vse ili parametr: "); river max; int z2; scanf("%d",&z2); printf("\n "); int maxi=0; max = all[0]; switch(z2) { case 12: { for(int i=1;i<last;i++) { if (max.length<all[i].length) { max=all[i]; maxi=i; } else { if(max.length=all[i].length) { if (max.area<all[i].area) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 13: { for(int i=1;i<last;i++) { if (max.length<all[i].length) { max=all[i]; maxi=i; } else { if(max.length=all[i].length) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 21: { for(int i=1;i<last;i++) { if (max.area<all[i].area) { max=all[i]; maxi=i; } else { if(max.area=all[i].area) { if (max.length<all[i].length) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 23: { for(int i=1;i<last;i++) { if (max.area<all[i].area) { max=all[i]; maxi=i; } else { if(max.area=all[i].area) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 31: { for(int i=1;i<last;i++) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } else { if(max.drain=all[i].drain) { if (max.length<all[i].length) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 32: { for(int i=1;i<last;i++) { if (max.drain<all[i].drain) { max=all[i]; maxi=i; } else { if(max.drain=all[i].drain) { if (max.area<all[i].area) { max=all[i]; maxi=i; } } } } printf("%s %s %d %d %d \n ",(all+maxi)->name,(all+maxi)->place,all[maxi].length,all[maxi].area, all[maxi].drain); break; } case 0: { int print; break; } } } int main() { FILE *f1; if((f1 = fopen("1.txt","r"))==NULL) { printf("error open file"); return -1; } int last; bool done; river *all; all=(river*)calloc(10,sizeof (river)); for (int i=0;i<10;i++) //иинициализация 10 рек из файла { all->name=(char*)calloc(10,sizeof (char)); all->place=(char*)calloc(10,sizeof (char)); } for (int i=0;i<10;i++) { fscanf(f1,"%s",&(all+i)->name); fscanf(f1,"%s",&(all+i)->place); fscanf(f1,"%d",&all[i].length); fscanf(f1,"%d",&all[i].area); fscanf(f1,"%d",&all[i].drain); last=i+1; } int print; int zaprosik; }
Решение задачи: «Разделение программы на функции»
textual
Листинг программы
caseN(all, last);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д