从文件中读取字符串和整数

时间:2014-06-01 22:48:42

标签: c

我一直在尝试从文件中读取一些字符串和整数,但似乎我没有正确地执行...这个程序应该从文件中读取数据...它必须创建一个列表写作的名字。对于每一个写作者,它应该使用像我在这里使用的那样的结构...对于每个写作者的文本,我还必须创建一个结构,就像我在这里做的那样。然后,我必须对它进行排序列表,创建另一个列表与最受欢迎的作家,然后打印输出...我的程序是:

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

struct AuthorRecord {   
    char textTitle[30];  
    long Download;       
    struct AuthorRecord *next;                 
  };
  typedef struct AuthorRecord *AuthorRecordType;
  typedef struct {
    char firstName[30];
    char lastName[30];  
    int idNumber,s1;
    long s2; 
    float p;
    AuthorRecordType text;
  } AuthorType;
 struct MemberNodeStruct {
    AuthorType *anAuthor;
    struct MemberNodeStruct *next;
  };
  typedef struct MemberNodeStruct *MemberNodeType;

int main()
{

 int m,n,i,j,d,z,e,y;    
  long k;   
  char s[30];
  AuthorType *a;
  struct MemberNodeStruct *l,*l2,*temp,*min,*b1,*b2,*r,*r2,*r3;
  struct AuthorRecord *t,*t2,*h,*h2,*min2,*temp2;
  FILE *f;
  f=fopen("project.txt","rt");     
  if(f==NULL)
    exit(-1);
  l2=NULL;
  t2=NULL;
  t=NULL;
  fscanf(f,"%d",&n); 
  getchar();      
  for(i=1;i<=n;i++)
  {
     y=0;              
    a=(AuthorType*)malloc(sizeof( AuthorType)); 
    fgets(s,30,f);                        
    strcpy(a->firstName,s);
    fgets(s,30,f);                
    strcpy(a->lastName,s);
    fscanf(f,"%d",&d);
    getchar();
    a->idNumber=d;                            
    fscanf(f,"%d",&m);
    getchar();                       
    t2=NULL;
    a->s1=m;
    a->s2=0;                                 
    for(j=1;j<=m;j++)
    {
      t=(struct AuthorRecord*)malloc(sizeof(struct AuthorRecord));       
      fgets(s,30,f);                                                
      e=0;                 
        h=t2;                                                 
      while(e==0 && h!=NULL)
      {
        if(strcmp(h->textTitle,s)==0)
        {
          e=1;
          h2=h;   
        }
        else
          h=h->next;
      }
      if(e==0)                        
      {
       strcpy( t->textTitle,s);
        fscanf(f,"%ld",&k);
        getchar();             
        t->Download=k;
        a->s2=a->s2+t->Download;       
        t->next=t2;
        t2=t;
          }
      else
      {
          y=y+1;
        fscanf(f,"%ld",&k);
        getchar();
        h2->Download=h2->Download+k;  
        a->s2=a->s2+k;              
      }
    }
    a->s1=a->s1-y;
    a->p=round(a->s2/a->s1);       
    a->text=t2;
    l=(struct MemberNodeStruct*)malloc(sizeof(struct MemberNodeStruct));   
    l->anAuthor=a;                                                         
    l->next=l2;
    l2=l;
  }




........  (150 more lines of code)
.....
system("pause")
return(0);

我已经使用scanf尝试了这个程序而不是文件fscanffgets而且它正常工作......这就是我不写剩下的我的代码。

project.txt是:

5
Julius Caesar 101
2
DeBelloGallico
3000
DeBelloCivili
8000
Sun Tzu 544
3
TheArtOfWar
5000
TheArtOfWar
5000
Strategems
3000
Plato Athenian 427
4
TrialOfSocrates
10000
Symposium
15000
TheRepublic
7000
Apology
9000
Gaius Suetonius 69
3
thetwelvecaesars
7000
dePoetis
500
DeClarisRhetorebus
1000
Orestis Mastakas 1995
1
WhyDidRomePrevail
15

每当我运行这个程序时,它最终都会失败......出于某种原因,它需要我输入...我试图删除getchar()但是,它仍然没有用!我该怎么办?

1 个答案:

答案 0 :(得分:2)

它从stdin读取输入,因为你告诉它这样做:

fscanf(f,"%d",&n); 
getchar();

尝试确保您没有从默认值(文件描述符0)读取输入的任何内容。 如果您需要从f读取1个字符,请使用fgetc而不是getchar。