2017-02-11 7 views
-4

Я изучаю, как программировать на C, и мне было трудно использовать файлы.Как использовать определенные части файлов и использовать их в программировании на языке C?

Как я могу сделать, например, есть два файла. На нем есть имена и оценки, от 1 до 10 студентов. как:

John 10  John 5 
Alex 6  Alex 9 
Mary 8  Mary 6 

Как добраться до Асесса конкретных цифр, от данного студента и добавить цифры, например, я должен использовать FSEEK, SEEK_END, или я должен использовать ftell? И взять медиану всего?

Как должен быть код?

edit1: То, что я пытался (жаль переменных в португальский, я добавил некоторые комментарии):

enter code here 


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct{ 

char nome[30]; 
float media; 
char situacao; 

}informa; 
// function to create files \/ 
int cria_arquivo(){ 
    informa A; 
    char nome[30]; 
    float n1, n2; 
    `FILE *arq1, *arq2, *arq3, *arq4; //pointers to archives students, grades,` and anothe file to print on 

    arq1 = fopen("alunos.txt","r"); // students and grades 
    arq2 = fopen("notas1.txt","r"); 
    arq3 = fopen("notas2.txt","r"); 
    arq4 = fopen("turma.dat", "wb"); 


    if((arq1 == NULL) || (arq2 == NULL) || (arq3 == NULL) || (arq4 == NULL)){ 
     printf("FATAL ERROR - NAO E POSSIVEL ABRIR ARQUIVOS"); //cant open the files 
     exit(1); 
    } 

    while(1){ 
     //printf("ola"); 
     fscanf(arq1, "%s", nome); 
     printf("%s\n", nome); 



     if (feof(arq1)) { 
      break; 
     } 
     //printf("Funciona"); 

     fscanf(arq2, "%f", &n1); 
     fscanf(arq3, "%f", &n2); 


     strcpy(A.nome, nome); 

     A.media = (n1+n2)/2; 
     printf("%f\n", A.media); 

     if(A.media < 5){ 
      A.situacao = 'F'; 
     } 
     else{ 
     A.situacao = 'A'; 
     } 

     fwrite(&A, sizeof(informa), 1, arq4); 
    } 
    fclose(arq1); fclose(arq2); fclose(arq3); fclose(arq4); 
    return 0; 
} 

int main(){ 
    cria_arquivo(); 

    return 0; 

} 
+0

Файл, с которым вы работаете, представляет собой хорошо структурированный текстовый файл. Читайте о 'fscanf' и используйте его. – DyZ

+0

Непонятно, что вы просите. Кроме того, неясно, как выглядят данные. Это выглядит как домашнее задание, и это хорошо, но вам нужно будет более четко рассказать о проблеме и о том, что вы уже сделали для ее решения. –

+0

С текстовыми файлами часто невозможно найти конкретные позиции для данных, так как элементы в текстовых файлах обычно являются * переменной шириной *. Для текстовых файлов обычно нужно прочитать весь файл, разбор каждой записи до тех пор, пока поиск не будет найден. –

ответ

0

Я вроде путаются ваш вопрос, но предполагая, есть только один файл (ARQ, aluno .txt) и в каждой строке есть одно имя и один класс, как, например:

Lukas 10 
    Matthias 8 
    Sven 5 
    Fernando 10 

и вы хотите знать только Фернандо сорт вы можете сделать что-то вроде этого:

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 

    int main() { 
     FILE *arq; 
     arq = fopen ("aluno.txt", "rt"); 
     if (arq == NULL) { 
     printf ("ERRO 404\n"); 
     } 
     char name[50]; 
     int grade; 
     while (fscanf (arq, "%s %d\n", &name, &grade) != EOF) { 
      if(name = "Fernando"){ 
      //do what you want 
      if(grade < 6){ 
       printf("Not good Fernando"); 
      } 
      } 
     } 
    } 

Хороший материал об этом методе заключается в том, что он будет работать по строкам и получать имена и оценки каждой строки, пока не дойдет до конца. Потому что функция fscanf() делает информацию каждой строки и затем переходит к следующей строке и возвращает EOF, когда это конец файла.

Смежные вопросы