如何读取文件的每一行并使用C将其存储在单独的变量中?

如何读取文件的每一行并使用C将其存储在单独的变量中?,c,C,我的输入文件包含以下内容: w 7b034d90 r 7b034c68 r df84d4 如何将第一个字符读取并存储到一个变量中,将第二个字符存储到另一个变量中?必须对几行输入进行此操作。 例如,我需要将w存储到变量A中,将7b034d90存储到变量B中。必须对几千行执行此操作,每行的第一个字符为w或r。最好的方法是什么 这是我的密码: struct MemBlock { char address char ReadorWrite; }; struct MemBlock bl

我的输入文件包含以下内容:

w 7b034d90
r 7b034c68
r df84d4
如何将第一个字符读取并存储到一个变量中,将第二个字符存储到另一个变量中?必须对几行输入进行此操作。 例如,我需要将w存储到变量
A
中,将7b034d90存储到变量
B
中。必须对几千行执行此操作,每行的第一个字符为w或r。最好的方法是什么

这是我的密码:

struct MemBlock
{
    char address
    char ReadorWrite;
};

struct MemBlock blocks[100]


int main (int argc, char *argv[])
{
    int line = 0;


    static const char filename[] = "sampleTest.txt";
    FILE *file = fopen ( filename, "r" );


    if (fp == NULL)
    {
        printf ("Error opening the file\n\n'");
        exit(EXIT_FAILURE);
    } else {

        if (argc == 3)
        {
         for (i=0,i<100,i++)
         {
             while ( fgets ( line, sizeof line, file ) != NULL ) 
          {
             r = fscanf(fp, "%s %s\n", blocks[i].ReadOrWrite, blocks[i].address);
             line++;
          }
         }


    fclose(fp);

    }
}
struct MemBlock
{
字符地址
字符读写;
};
struct MemBlock块[100]
int main(int argc,char*argv[])
{
内线=0;
静态常量字符文件名[]=“sampleTest.txt”;
FILE*FILE=fopen(文件名,“r”);
如果(fp==NULL)
{
printf(“打开文件时出错\n\n”);
退出(退出失败);
}否则{
如果(argc==3)
{

对于(i=0,i如果您不知道有多少对,则需要通过某种机制跟踪它们。一种方法是指向malloc并将它们链接到列表中。为此,请添加指向结构的指针

因此,流类似于下面的伪代码。它需要结构定义、错误代码、API文件调用正确,并确保链表正确

struct Memblock head;  
struct Memblock *oldp = &head;
main() {  
    fp = fopen(file);  
    while (fgets(line, fp, sizeof(line)-1) != NULL) {  
        if (sscanf(line, "%c %d", &flag, &address) == 2) {  
            sp = malloc(sizeof(struct));  
            sp->flag = flag;  
            sp->address = address;    
            sp->next = NULL;
            oldp->next = sp;  
        }
    }  
}

假设OP在完成后需要一个
struct MemBlock
数组

C伪代码(省略错误处理)

struct MemBlock{
无符号长地址;//数据显然是十六进制的
字符读写;
};
FILE*inf=fopen(文件名,“rt”);//使用“rt”
尺寸线=0;
字符缓冲区[1+1+16+2+100];//足够大,可以容纳预期的字母和数字+更改
while(fgets(buf,sizeof buf,inf)!=NULL)行++;
弗雷温德(inf);
struct MemBlock*Array=calloc(line,sizeof*Array);
对于(大小i=0;i


我喜欢一个传递链表的想法,但是想提供另一个POV。

< P>有两种方法,如:代码> sChanff()/<代码>或使用<代码> SrrReR()/Cube >,或者在C++中,类似于

在数组、结构上读取,在这种情况下,可能是动态分配。当你有特定的代码被破解时,我们可以帮助你修复它。,sscanf()…..?使用循环并使用sscanf@MojoJojo58欢迎来到Stack Overflow!正如Oli和Scott指出的,在这里发布问题之前,我们要求您尝试自己搜索答案()。然后试着实现它!这个特定的问题在谷歌搜索中会有很多答案。如果在那之后你仍然有问题,请发布你在问题中尝试过的代码,然后我们可以帮助你。祝你好运!对不起。我是C新手,我必须动态地将十六进制地址分配给结构的一个字符。我不过我没办法,我只是把代码放在这里了。
struct MemBlock {
  unsigned long address;   // Data is obviously hexadecimal
  char ReadorWrite;
};

FILE *inf = fopen(filename, "rt");  // Use "rt"
size_t line = 0;
char buffer[1+1+16+2+100]; // big enough for expected letter and number + change
while (fgets(buf, sizeof buf, inf) != NULL) line++;
frewind(inf);
struct MemBlock *Array = calloc(line, sizeof *Array);
for (size_t i = 0; i< line; i++) {
  if (fgets(buf, sizeof buf, inf) != NULL)) handle error
  if (2 !=sscanf("%c%lx", &Array[i].ReadorWrite, &Array[i].address)) handle error
}
fclose(inf);
// Use Array[] with length `line`.
...
free(Array)