gpt4 book ai didi

c - 解析 C 文件 I/O

转载 作者:行者123 更新时间:2023-11-30 16:36:20 26 4
gpt4 key购买 nike

我需要从文件 Io 中提取不带逗号和注释的文本。

该程序的输出应该是:

0 5 0 0/ 0 0 0 7 / 0 4 0 0

有人可以帮忙吗?这是我的代码和文件内容:

array[3][3] = {    
//****************************************
/*0*/ //
/*0*/ { 0, 5, 0, 0},
//****************************************
/*1*/ //
/*1*/ { 0, 0, 0, 7},
//****************************************
/*2*/ //
/*2*/ { 0, 0, 4, 0},
//****************************************
};
<小时/>
#include <stdio.h>
#include <string.h>

void main()
{
FILE *fp = fopen("file.txt", "r");
const char s[250] = ",";
char *token;
if(fp != NULL)
{
char line[200];
while(fgets(line, sizeof line, fp) != NULL)
{
token = strtok(line, s);
while (token != NULL)
{
printf ("%s ",token);
token = strtok (NULL, s);
}
}
} else {
perror("file2.txt");
}
}

最佳答案

打开文件后,使用fgets()读取并忽略无关紧要的初始行。您可以使用类似的函数

void skiplines(FILE *f, char *str, int n)
{
while(n>0)
{
if(fgets(str, 100, f)==NULL)
{
return;
}
if(str[strlen(str)-1]=='\n')
{
--n;
}
}
}

其中 fFILE 指针,n 是要跳过的行数,strfgets() 写入数据的字符数组。

fgets()如果失败则返回NULL

在调用函数中,它们的声明如下

char str[100];
FILE *fin=fopen("in3.txt", "r");
if(fin==NULL)
{
perror("File not found.");
}

请注意,如果尝试打开文件时发生错误,fopen() 将返回 NULL

现在跳过前几行,直到到达需要处理的第一行。

skiplines(fin, str, 7);

此后,str 将读取最后一行,这是我们需要从中提取数字的行。

使用sscanf()转换数字

sscanf(str, "%*[^{]{ %d, %d, %d, %d", &num[0], &num[1], &num[2], &num[3]);

其中 num[] 是一个整数数组。

%[^{] 将继续扫描,直到排除 { 字符。 * 用于分配抑制,这意味着它不会被分配到任何地方。

你有

num[0] -> 0
num[1] -> 5
num[2] -> 0
num[3] -> 0

现在使用循环来完成其余部分。

关于c - 解析 C 文件 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com