2017-02-11 46 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。

相关问题