Работа с файлами

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by unfii, 30 May 2009.

  1. unfii

    unfii New Member

    Joined:
    19 Apr 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    Создать файл, содержащий сведения о результатах охоты.
    Данные должны быть представлены в виде следующей структуры:
    -фамилия охотника;
    -количество убитых животных;
    -общая масса всех животных.
    Написать программу, которая находит самого результативного охотника-за количеством животных и по весу животных.
    Каждую из функций разместить в отдельном заголовочном файле.

    На чем я остановился?
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #define FILE_NAME "file.txt"
    struct oxota
    {
    char prizvishe;
    int vpol;
    int vaga;};
    
    void main ()
    {
    struct oxota data[100];
    char line[100];
    int v=0;
    FILE*fp=fopen(FILE_NAME, "r");
    while (fgets(line, sizeof(line), fp)!=NULL)
    {
    sscanf(line, "%s %i %i", &data[v].prizvishe, &data[v].vpol, &data[v].vaga);
    printf("%s", line);
    v++;
    }
    printf("\n");
    }
     
  2. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    В каком виде строки в файле?
     
  3. unfii

    unfii New Member

    Joined:
    19 Apr 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    пример 2 записей
    Code:
    Babyrka 12 300
    Pupkin 13 200
     
  4. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Code:
    // main.cpp
    
    #include //
    #include "readname.h"
    #include "readmass.h"
    #include "readcount.h"
    
    
    const int N = 10;
    
    int main () {
    	const char* name; 
    	scanf_s("%s",&name);
    	FILE *f;
    	char* names;
    	int* mass;
    	int* count;
    	char buffer[256];
    
     f=fopen(name, "r");
    
    if (f) { 
    	while (fgetc(f)!=EOF) { 
    		for (int i=0; N; i++) {
    		fgets(buffer, 256, f); 
    			readname(i, names, buffer); 
    			readmass(i, mass, buffer);
    			readcount(i, count, buffer);
    		}
    	}
    }
    int maxcount=0; 
    int C=0; 
    int maxmass=0;  
    int m=0; 
    
    for (int i=0; N; i++) { 
    	if (mass[i]>maxmass) { 
    		maxmass=mass[i]; 
    		m=i; } 
    	if (count[i]>maxcount) {
    		maxcount=count[i];
    		C=i; }
           }
    
    
    	for (int i=0; N; i++) { 
    		if (mass[i]=maxmass) 
    			printf(" Максимальная масса %s", &name[m]);
    		if (count[i]=maxcount) 
    			printf(" Максимальное количество %s", &name[C]);
    	}
    
    return 0;
    }
    
    Code:
    // readname.h
    
    #include //
    
    
    void readname(int i, char* names, char* buffer) { 
    	char c;
    		while (1) { 
    			sscanf_s(buffer, "%c", &c);
                            if (c==' ') break;
    			names[i]+=c; 
    			}
    }
    Code:
    // readcount.h
    
    #include //
    
    void readcount(int i, int* count, char* buffer) { 
    	char c;
    	char* temp;
    		while (1) { 
    			sscanf_s(buffer, "%c", &c);
                            if (c==' ') break;
    			temp+=c; 
    			}
    	
    	count[i]=atoi(temp); 
    } 
    Code:
    // readmass.h
    
    #include //
    
    void readmass(int i, int* mass, char* buffer) { 
    	char c;
    	char* temp;
    		while (1) { 
    			sscanf_s(buffer, "%c", &c);
                            if (c==' ') break;
    			temp+=c; 
    			}
    	
    	mass[i]=atoi(temp); 
    } 
     
    #4 Fata1ex, 30 May 2009
    Last edited: 31 May 2009
    2 people like this.
  5. unfii

    unfii New Member

    Joined:
    19 Apr 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    а можно просто на C?а то преподы порешают :)
     
    1 person likes this.
  6. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    я не пойму в чем сложность? ну считал ты всех охотников в массив. отправляй этот массив в функции, считающие лучшего охотника. там простой цикл.
    в первой функции переменные типа

    Code:
    int cur_max_kills = 0;
    int best_hunter_index = 0;
    if(cur_max_kills < hunters[i].kills){
        cur_max_kills = hunters[i].kills;
        best_hunter_index = i;
    }
    эти функции, которые вычисляют лучших охотников, вообще мало чем привязаны к си \ с++, ибо не юзают никакие специфичные классы и функции. чистый самопал.
     
    1 person likes this.
  7. unfii

    unfii New Member

    Joined:
    19 Apr 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    ошибка KRNL386.exe при запуске приложения
     
  8. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    борланд такой борланд.
    на самом деле хз что значит эта ошибка, ибо борланд с++ никада не юзал.
     
    #8 Ra$cal, 31 May 2009
    Last edited: 31 May 2009
    1 person likes this.