从C中的文件中读取整数

时间:2014-05-02 05:44:07

标签: c file-io

所以我想读一个包含整数的文件。我可以阅读第一个数字,但我怎么能读到所有这些数字呢?字符串很简单,但这是不同的。我也想以一种方式阅读它们,然后我可以将它们加在一起。我编辑了我的代码,我能够输出所有代码,但我的另一个问题是如何单独选择每个数字,以便我可以添加我想要的任何内容。例如,如果我只想选择第一列并将其添加到一起。

数据:

54 250 19  
62 525 38  
71 123 6 
85 1322 86  
97 235 14

代码:

#include <stdio.h>
#include <conio.h>

int main()
{
    // pointer file
    FILE *pFile;
    char line[128];

    // opening name of file with mode
    pFile = fopen("Carpgm.txt","r");

    //checking if file is real and got right path
    if (pFile != NULL)
    {

        while (fgets(line, sizeof(line), pFile) != NULL)
        {
            int a, b, c;

            if (sscanf(line, "%d %d %d", &a, &b, &c) == 3)
            {
                /* Values read, do something with them */
                printf("%d %d %d\n",a, b, c);
            }
        }

        //using fgets to read with spaces 
        //fgets(line,81, pFile);

        //printing the array that got the pfile info

        //closing file
        fclose(pFile);        
    }
    else 
    {
        printf("Could not open file\n");     
    }

    getch();
    return 0;
}

4 个答案:

答案 0 :(得分:2)

使用fgets阅读完整的一行,然后&#34;解析&#34;使用sscanf的行。

这样的东西
char line[128];
while (fgets(line, sizeof(line), pFile) != NULL)
{
    int a, b, c;

    if (sscanf(line, "%d %d %d", &a, &b, &c) == 3)
    {
        /* Values read, do something with them */
    }
}

答案 1 :(得分:1)

最好的方法可能是使用fscanf()一次读取一个数字,然后根据需要跳过空格(和换行符)。

或者,您可以使用fgets()读取整行,然后解析/标记该行,在这种情况下我会使用strtol(),因为它使得继续下一个nmumber变得微不足道。这种方法会将您限制在最大行长度,fscanf()方法不会。

答案 2 :(得分:0)

使用fscanf读取整行,然后添加所有行。

您可以按照以下方式执行此操作:

//using fscanf to read 
while(EOF != fscanf(pFile,"%d %d %d", &a, &b, &c))
{
   //Add all of them
   line = a+b+c;

   //printing the array that got the file info
   printf("%d",line);

   //So it will help to remove trailing "\n" and at the end it will help to come out of loop.
   if (EOF == fgetc(fp))
   {
      break;
   }
}

答案 3 :(得分:0)

#include <stdio.h>
#include <conio.h>

int main()
   {
   FILE *pFile;

不是只读取该行上的一个整数,而是一次读取所有三个整数。

// int line;
   int v1, v2, v3;

   // opening name of file with mode
   pFile = fopen("Carpgm.txt","r");
   if(NULL == pFile)
      {
      fprintf(stderr, "Could not open file\n");
      goto CLEANUP;
      }

添加了一个循环来读取所有行。

   for(;;)
      {

使用&#39; elementsRead&#39;知道什么时候结束文件&#39;或者&#39; EOF&#39;已经到达。

      int elementsRead;
      //using fscanf to read

现在读取所有三个数字(同时)。

      elementsRead=fscanf(pFile,"%d %d %d", &v1, &v2, &v3);
      if(EOF == elementsRead)
         break;

      //printing the array that got the pfile info

现在打印所有三个数字(同时)。

      printf("%d %d %d\n", v1, v2, v3);
      }

CLEANUP:

   if(pFile)
      fclose(pFile);

   getch();

   return 0;
   }