0

我有包含 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;
    }  
} 
4

2 回答 2

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]);
            }
      } 

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

于 2012-11-19T03:28:35.720 回答
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] );
于 2012-11-19T03:18:09.600 回答