如何读取文件的每一行并使用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)