Разделение программы на функции - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы