从基于空格分隔符的文件中读取

时间:2012-11-19 03:04:54

标签: c

我的文本文件包含4行数据。每行如下

Candies 2
Cookies -4
Soda 5
Milk 8

我必须读取C函数中的值(2,-4,5,8)并将它们存储在变量中。

我已经编写了以下代码,我被卡在XXXXXX所指示的位置。我不确定那里到底发生了什么。感谢您的帮助。

  void function()
  {
    int count=0,value[4],length=0;

    FILE *fp;

    fp = fopen("file.txt","r");

    if (fp == NULL)
    {
      fprintf(stderr, "Can't open file !\n");
      exit(1);  
    }

     char line[100];
        for (count = 0; count < 4; count++)
        {      
            if (fgets(line,sizeof(line),fp)==NULL)
        break;

        else 
    {  

       while(fp!="" && length<strlen(line))
       {
       fp++;length++
       }

       if(fp == "") 
         value[count]= XXXXXXXX;
    }  
} 

2 个答案:

答案 0 :(得分:0)

不要增加fp。它没有按照你的想法做到。

如果您想在现有C函数的帮助下完成此操作,只需在您的行中搜索空格(好吧,我在这里使用了isspaceatoi):

int pos = 0;
while( line[pos] != 0 && !isspace(line[pos]) ) pos++;
if( line[pos] != 0 ) {
    line[pos++] = 0;
    value[count] = atoi( &line[pos] );
    printf( "Key: '%s' / Value: %d\n", line, value[count] );
}

或者您可以使用sscanf ...

int nread = sscanf( line, "%*s %d", &value[count] );

或者:

char key[100];
int nread = sscanf( line, "%s %d", key, &value[count] );

答案 1 :(得分:0)

void function()
 {
    int count=0,value[4],length=0;

    FILE *fp;

    fp = fopen("file.txt","r");

    if (fp == NULL)
    {
      fprintf(stderr, "Can't open file !\n");
      exit(1);  
    }

     char line[100];
        for (count = 0; count < 4; count++)
        {      
            if (fgets(line,sizeof(line),fp)==NULL)
                break;

          else 
            {  
              sscanf(line,"%*s %d",&value[count]);
            }
      } 

我修改了代码,你可以尝试一下。