Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File_Int_Line - Fatal编程技术网

C 读取一个文件行,该行发生更改,但该行的结构已知

C 读取一个文件行,该行发生更改,但该行的结构已知,c,file,int,line,C,File,Int,Line,我有一个逐行组织的文件,所有行的结构由我定义,但每行的内容可以根据同一行包含的两个变量增加或减少 行示例:1安德烈2 0 5 13 05 2011 4 13 05 2011 “1”表示用户ID “Andre”表示与ID关联的名称 “2 0”细分:“2”表示用户带回家的电影数量,“0”表示用户保留的电影数量 到目前为止,该行遵循模式%d%s%d%d,它们可以存储在我想要的变量中 现在最难的部分来了。根据“2 0”部分,程序知道必须将模式%d%d%d%d(“5 13 05 2011”和“4 13 0

我有一个逐行组织的文件,所有行的结构由我定义,但每行的内容可以根据同一行包含的两个变量增加或减少

行示例:1安德烈2 0 5 13 05 2011 4 13 05 2011

“1”表示用户ID

“Andre”表示与ID关联的名称

“2 0”细分:“2”表示用户带回家的电影数量,“0”表示用户保留的电影数量

到目前为止,该行遵循模式%d%s%d%d,它们可以存储在我想要的变量中

现在最难的部分来了。根据“2 0”部分,程序知道必须将模式%d%d%d%d(“5 13 05 2011”和“4 13 05 2011”-表示带回家的电影日期)读取2次,并且程序知道,在读取前一模式的2次后,它知道由于“2 0”中的零部分,我不需要读取任何其他内容

包含更多数据的行示例:1 Andre 2 1 5 13 05 2011 4 13 05 2011 7 14 05 2011

‘21’

“2”部分告诉程序,在该行中,变量_one[i][4]应为“5 13 05 2011”和“4 13 05 2011”(示例)

“1”部分告诉程序,在该行中,应将“714052011”改为变量_two[i][4](示例)

我正在使用
fscanf(文件,“%d%s%d%d”、&id[I]、&nomes[I]、&livros_num[I][0]、&livros_num[I][1])
阅读'1 Andre 2 0',但如何根据'2 0'阅读该行的其余部分?

您可以使用。 下面是一个例子:

int int1;
char char_buf[BUF_SIZE];
fscanf ( file_stream, "%d%s", &int1, char_buf);
你可以用。 下面是一个例子:

int int1;
char char_buf[BUF_SIZE];
fscanf ( file_stream, "%d%s", &int1, char_buf);

在第一次调用fscanf之后,需要根据读取的变量进行循环。您似乎已经意识到,您在第一次调用中读取的
int
,决定了您在该行中需要额外读取的次数

int i;
for ( i=0; i< livros_num[i][0]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}

// same procedure for second number
for ( i=0; i< livros_num[i][1]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}
fscanf( file, "%s\n" ); // I'm NOT sure if this is nessecary, to move the file to the next line
inti;
对于(i=0;i
第一次调用fscanf后,需要根据读取的变量进行循环。您似乎已经意识到,您在第一次调用中读取的
int
,决定了您在该行中需要额外读取的次数

int i;
for ( i=0; i< livros_num[i][0]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}

// same procedure for second number
for ( i=0; i< livros_num[i][1]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}
fscanf( file, "%s\n" ); // I'm NOT sure if this is nessecary, to move the file to the next line
inti;
对于(i=0;i
怎么样

int j;
fscanf(file, "%d %s %d %d", &id[i],&nomes[i],&livros_num[i][0],&livros_num[i][1]);
for (j=0;j<livros_num[i][0];++j)
{
    fscanf(file,"%d %d %d %d",&variable_one[0],&variable_one[1],&variable_one[2],&variable_one[3]);
}
intj;
fscanf(文件,“%d%s%d%d”、&id[i]、&nomes[i]、&livros_num[i][0]、&livros_num[i][1]);
对于(j=0;j

int j;
fscanf(file, "%d %s %d %d", &id[i],&nomes[i],&livros_num[i][0],&livros_num[i][1]);
for (j=0;j<livros_num[i][0];++j)
{
    fscanf(file,"%d %d %d %d",&variable_one[0],&variable_one[1],&variable_one[2],&variable_one[3]);
}
intj;
fscanf(文件,“%d%s%d%d”、&id[i]、&nomes[i]、&livros_num[i][0]、&livros_num[i][1]);

对于(j=0;j好吧,当你阅读《20》时,你会得到两条信息:你需要循环看回家的电影的日期的次数和你需要循环看所有预定的次数

int i;
int num_movies_taken, num_movies_reserved;

// read all the dates of the movies taken home
num_movies_taken = livros_num[i][0];
for (i = 0; i < num_movies_taken; i++)
{
    fscanf("%d %d %d %d", ...);
}

// read all the reservations
num_movies_reserved = livros_num[i][1];
for (i = 0; i < num_movies_reserved; i++)
{
    fscanf("%d %d %d %d", ...);
}
inti;
int num_movies_take,num_movies_reserved;
//阅读所有带回家的电影的日期
num_movies_take=livros_num[i][0];
对于(i=0;i
好吧,当你阅读“20”时,你会得到两条信息:你需要循环播放带回家的电影的日期的次数和你需要循环阅读所有预订的次数

int i;
int num_movies_taken, num_movies_reserved;

// read all the dates of the movies taken home
num_movies_taken = livros_num[i][0];
for (i = 0; i < num_movies_taken; i++)
{
    fscanf("%d %d %d %d", ...);
}

// read all the reservations
num_movies_reserved = livros_num[i][1];
for (i = 0; i < num_movies_reserved; i++)
{
    fscanf("%d %d %d %d", ...);
}
inti;
int num_movies_take,num_movies_reserved;
//阅读所有带回家的电影的日期
num_movies_take=livros_num[i][0];
对于(i=0;i
我已经有了fscanf来读取4个对象(%d%s%d%d),因为它们总是其中的4个。fscanf(文件,“%d%s%d%d”、&id[i]、&nomes[i]、&livros_num[i][0]、&livros_num[i][1]);但是当我需要根据'2 0'读取x值时,问题就来了@andrepcg:对不起..我读问题的速度太快了。如果你不知道字段号,可能最好用fscanf将整行作为字符串读取,然后用strtok标记它,然后重用fscanf从每个标记中提取正确的类型。我已经有了fscanf来读取4个对象(%d%s%d%d),因为它们总是其中的4个。fscanf(文件,“%d%s%d%d”、&id[i]、&nomes[i]、&livros_num[i][0]、&livros_num[i][1]);但当我需要根据“2 0”读取x值时,问题就来了@andrepcg:对不起..我读问题的速度太快了。如果你不知道字段号,可能最好用fscanf将整行作为字符串读取,然后用strtok标记它,然后重用fscanf从每个标记中提取正确的类型。@法律有更优雅的解决方案。@n@thelaws有更优雅的解决方案我不懂你的日期格式。月日<代码>?年?我不懂你的日期格式。月日<代码>