Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用不同数据类型的输入读取C中的文件_C_Fgets_Fread_Scanf - Fatal编程技术网

使用不同数据类型的输入读取C中的文件

使用不同数据类型的输入读取C中的文件,c,fgets,fread,scanf,C,Fgets,Fread,Scanf,我正在读一个C格式的文件,格式如下 int int int int char double double 但是重复了已知的次数。(文件的第一行(未在示例中列出)指定此序列将重复的次数)我想将这些值解析为一个结构。但是,我不知道如何读取这些元素,因为它们有不同的数据类型, 我在研究三种不同的方法 fread-->不起作用,因为不同元素的数据类型不同,字节数也不相同 由于存在多种不同的数据类型,fscanf-->无法工作 fgets-->不起作用,因为它只在有换行符时停止 所以我不知道该怎么办。也

我正在读一个C格式的文件,格式如下

int int int int char double double
但是重复了已知的次数。(文件的第一行(未在示例中列出)指定此序列将重复的次数)我想将这些值解析为一个结构。但是,我不知道如何读取这些元素,因为它们有不同的数据类型, 我在研究三种不同的方法

fread-->不起作用,因为不同元素的数据类型不同,字节数也不相同

由于存在多种不同的数据类型,fscanf-->无法工作

fgets-->不起作用,因为它只在有换行符时停止

所以我不知道该怎么办。也许我正在努力寻找一个优雅的解决方案来加载一个像这样输入不好的文件,或者也许我忽略了我已经提到的某个函数中的某些东西

顺便说一句,这是一个学校项目,但我不是在问答案,只是一个提示

我只能在stdio和stdlib库中使用


感谢所有的帮助

fscanf
应该可以工作了

fscanf(file, "%d %d %d %d %c %lf %lf", ....);

fscanf
应该可以工作

fscanf(file, "%d %d %d %d %c %lf %lf", ....);

fscanf
应该可以工作

fscanf(file, "%d %d %d %d %c %lf %lf", ....);

fscanf
应该可以工作

fscanf(file, "%d %d %d %d %c %lf %lf", ....);

您可以使用这些函数中的任何一个来读取文件。这种情况下最容易使用的方法是
fscanf()

您可以在循环内读取,因为您只需迭代已知的次数就可以知道要读取的次数

fscanf(fd,"%d %d %d %d %d %c %lf %lf",&a,&b,&c,&d,&e,%f,&h)
或者您可以创建一个结构

struct data
{
  int a;
  int b;
  int c;
  int d;
  char e;
  double h;
  double i;
}var1;

并在fscanf()中使用它来填充其成员的值

您可以使用这些函数中的任何一个来读取文件。这种情况下最容易使用的方法是
fscanf()

您可以在循环内读取,因为您只需迭代已知的次数就可以知道要读取的次数

fscanf(fd,"%d %d %d %d %d %c %lf %lf",&a,&b,&c,&d,&e,%f,&h)
或者您可以创建一个结构

struct data
{
  int a;
  int b;
  int c;
  int d;
  char e;
  double h;
  double i;
}var1;

并在fscanf()中使用它来填充其成员的值

您可以使用这些函数中的任何一个来读取文件。这种情况下最容易使用的方法是
fscanf()

您可以在循环内读取,因为您只需迭代已知的次数就可以知道要读取的次数

fscanf(fd,"%d %d %d %d %d %c %lf %lf",&a,&b,&c,&d,&e,%f,&h)
或者您可以创建一个结构

struct data
{
  int a;
  int b;
  int c;
  int d;
  char e;
  double h;
  double i;
}var1;

并在fscanf()中使用它来填充其成员的值

您可以使用这些函数中的任何一个来读取文件。这种情况下最容易使用的方法是
fscanf()

您可以在循环内读取,因为您只需迭代已知的次数就可以知道要读取的次数

fscanf(fd,"%d %d %d %d %d %c %lf %lf",&a,&b,&c,&d,&e,%f,&h)
或者您可以创建一个结构

struct data
{
  int a;
  int b;
  int c;
  int d;
  char e;
  double h;
  double i;
}var1;

并在fscanf()中使用它来填充其成员的值

要详细说明前面的答案,您需要以下内容:

int intVar1;
int intVar2;
int intVar3;
int intVar4;
char c;
double doubleVar1;
double doubleVar2;

fscanf(file, "%d %d %d %d %c %lf %lf", 
       &intVar1,
       &intVar2,
       &intVar3,
       &intVar4,
       &c,
       &doubleVar1,
       &doubleVar2);

要详细说明前面的答案,您需要以下内容:

int intVar1;
int intVar2;
int intVar3;
int intVar4;
char c;
double doubleVar1;
double doubleVar2;

fscanf(file, "%d %d %d %d %c %lf %lf", 
       &intVar1,
       &intVar2,
       &intVar3,
       &intVar4,
       &c,
       &doubleVar1,
       &doubleVar2);

要详细说明前面的答案,您需要以下内容:

int intVar1;
int intVar2;
int intVar3;
int intVar4;
char c;
double doubleVar1;
double doubleVar2;

fscanf(file, "%d %d %d %d %c %lf %lf", 
       &intVar1,
       &intVar2,
       &intVar3,
       &intVar4,
       &c,
       &doubleVar1,
       &doubleVar2);

要详细说明前面的答案,您需要以下内容:

int intVar1;
int intVar2;
int intVar3;
int intVar4;
char c;
double doubleVar1;
double doubleVar2;

fscanf(file, "%d %d %d %d %c %lf %lf", 
       &intVar1,
       &intVar2,
       &intVar3,
       &intVar4,
       &c,
       &doubleVar1,
       &doubleVar2);


我认为标准的方法是使用
fgets
并将每一行读入本地
char
数组,然后使用
sscanf
读取单个片段。谢谢merlin,我认为使用多类型说明符的fscanf方法似乎是最好/最简单的解决方案。我认为标准的方法是使用
fgets
并将每一行读入一个本地
char
数组,然后使用
sscanf
读取单个片段。感谢merlin,我认为使用多类型说明符的fscanf方法似乎是最好/最简单的解决方案。我认为标准的方法是使用
fgets
并将每一行读入一个本地
char
数组,然后使用
sscanf
读取单个片段。感谢merlin,我认为使用多类型说明符的fscanf方法似乎是最好/最简单的解决方案。我认为标准的方法是使用
fgets
并将每一行读入一个本地
char
数组,然后使用
sscanf
读取单个片段。感谢merlin,我认为带有多个类型说明符的fscanf方法似乎是最好/最简单的解决方案。我没有意识到我能够以这种方式利用fscanf!我以为它一次只能读一个东西,所以必须进行迭代!谢谢你的帮助!!!最后一个问题,所有这些值都会被读入一个数组,还是每个值都会有自己声明的变量?@Liquidmetal您可以为它们声明单独的变量,或者将它们读入您想要的结构或w/e。我没有意识到我能够以这种方式利用fscanf!我以为它一次只能读一个东西,所以必须进行迭代!谢谢你的帮助!!!最后一个问题,所有这些值都会被读入一个数组,还是每个值都会有自己声明的变量?@Liquidmetal您可以为它们声明单独的变量,或者将它们读入您想要的结构或w/e。我没有意识到我能够以这种方式利用fscanf!我以为它一次只能读一个东西,所以必须进行迭代!谢谢你的帮助!!!最后一个问题,所有这些值都会被读入一个数组,还是每个值都会有自己声明的变量?@Liquidmetal您可以为它们声明单独的变量,或者将它们读入您想要的结构或w/e。我没有意识到我能够以这种方式利用fscanf!我以为它一次只能读一个东西,所以必须进行迭代!谢谢你的帮助!!!最后一个问题,所有这些值都会被读入一个数组,还是每个值都有自己声明的变量?@Liquidmetal你可以为它们声明单独的变量,或者读入你想要的结构或w/e。谢谢,下面的人指出了一些我不知道我能做的事情。谢谢,下面的人指出了一些我不知道我能做的事情。谢谢,下面的人指出了一些我不知道我能做的事情。谢谢,下面的人指出了一些我不知道我能做的事情。