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

标签 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);
   }

最佳答案

请参阅下面代码中的注释:

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

关于c - 使用一个 fscanf 从文件中读取多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716691/

相关文章:

c - atof 产生奇怪的结果

c - 如何读取用户在 C 中输入的字符串?

java - 为什么在这种情况下我必须以某种方式关闭 ZipOutputStream?

linux - Unix命令在目录中所有文件的顶部插入注释

c - 在C语言中,我如何c写一个函数来打开一个csv文件并将值读入数组?

c - 如何在 C 中不使用 gets() 获取包含空格的字符串?

c - fgets 和 fscanf 之间的区别?

c - 如何包含<lua.h>?

c++ - 如果我不关心返回值,是否需要 pthread_exit

c - Malloc 分配超出范围的内存地址