使用一个fscanf从文件中读取多个字符串

时间:2014-05-17 22:27:46

标签: c file scanf

所以我的想法是读取一个文件并将其放在struct CARRO的字段中。

事情是,当我尝试printf结构变量(例如dados[1].marca)时,它不会在控制台中显示任何内容。

我真的无法看到问题所在,因为fscanf实际上返回8(8个成功读取变量)。

我使用的文件是汽车列表,每行包含有关特定型号的信息,并具有以下格式:

Ford[]Transit Custom Van 270L1 Econetic Base 2.2TDCi H1[\t]2013[\t]3[\t]2[\n]
(...)

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

typedef struct
   {
   char marca[50]; 
   char modelo[50];
   char ano[5];
   char lugares[5];
   char portas[5];
   }CARRO;

main()
   {
   FILE *fp=NULL;
   CARRO dados[4700];
   int i=0;

   fp=fopen("car.txt","r");
   while (fscanf(fp,"%[^ ] %[^\t] %[^\t] %[^\t] %[^\n]", 
         dados[i].
         marca, 
         dados[i].modelo, 
         dados[i].ano,
         dados[i].lugares,
         dados[i].portas)!=EOF);  
      {
      i++;
      }

   fclose(fp);
   }

1 个答案:

答案 0 :(得分:0)

请参阅以下代码中的评论:

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

typedef struct
   {
   char marca[50];
   char modelo[50];
   char ano[5];
   char lugares[5];
   char portas[5];
   } CARRO;

int main()     // Changed to 'int' type.
   {
   FILE *fp=NULL;
   CARRO dados[4700];
   int i=0;
   int nCnt;   // Added this line for printing result.

   fp=fopen("car.txt","r"); //Should check fp here to ensure file was successfully opened.  
   while(fscanf(fp," %[^ ] %[^\t] %[^\t] %[^\t] %[^\n]\n", // Slightly modified to 'gobble-up' newlines.
         dados[i].marca,
         dados[i].modelo,
         dados[i].ano,
         dados[i].lugares,
         dados[i].portas)!=EOF)  // Removed semicolon. As per 'BLUEPIXY'
      {
      i++;
      }
   fclose(fp);

   /* Added to print result. */
   for(nCnt = 0; nCnt < i; ++nCnt)
      printf("marca[%s] modelo[%s] ano[%s] lugares[%s] portas[%s]\n",
         dados[nCnt].marca,
         dados[nCnt].modelo,
         dados[nCnt].ano,
         dados[nCnt].lugares,
         dados[nCnt].portas
         );

   return(0);  
   }