我想创建一个函数read_ins
,该函数仅从文件中读取第一行。
我希望我的代码在第二次调用中读取第二行,在第三次调用中读取第三行,依此类推...
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *singleIns; // for reading from Instruction FILE
char *instructions[3][3]; // all the Instructions
singleIns = malloc(sizeof(char)*32);
int i =0,j=0;
// Read one Instruction (32bit)
while (i<3){
j=0;
while(j<3){
read_ins(singleIns);
instructions[i][j] = singleIns;
j++;
}
i++;
}
printf("%s",instructions[0][0]);
return 0;
}
void read_ins(char ins[]){
FILE *fptr;
if ((fptr = fopen("program.txt", "r")) == NULL){
printf("Error! opening file");
// Program exits if file pointer returns NULL.
exit(1);
}
// reads text until newline
fscanf(fptr,"%[^\n]", ins);
fclose(fptr);
}
答案 0 :(得分:0)
如您所见,函数read_ins
总是输出文件program.txt
的第一行。
这是因为每次使用fopen
打开文件时,读取光标都是从文件的开头开始的。
要更改此行为,您应该打开文件,并将FILE *作为函数read_ins
的参数,并使其保持打开状态直到主程序结束。
类似的东西:
int main(void)
{
// Open file
FILE *fptr;
if ((fptr = fopen("program.txt", "r")) == NULL){
printf("Error! opening file");
// Program exits if file pointer returns NULL.
exit(1);
}
// Read Instructions (32bit)
while (i<3){
read_ins(fptr, ins);
}
// Close file
fclose(fptr);
return 0;
}
void read_ins(FILE* fptr, char ins[]){
// reads text until newline
fscanf(fptr,"%[^\n]", ins);
}
由于新的read_ins
仅一行,您可以摆脱它...
或者,您可以在read_ins
中打开和关闭文件,但需要指定要返回的行号。并读取文件,直到找到正确的行。但是,每次打开和关闭文件时,这都非常昂贵。