gpt4 book ai didi

c - 扫描和扫描文件中的数据时出现问题

转载 作者:行者123 更新时间:2023-11-30 14:32:41 26 4
gpt4 key购买 nike

我在从文件中提取数据时遇到一些麻烦,我不明白出了什么问题,它对于单位数整数工作正常,但是当输入是两位数时,它不会扫描整数。其他一切都正常。

假设输入是:

abc de,1,2,y

那么输出是:

“abc de”1 2 y但是当输入是

cde abc,21.31,y

扫描在 %d 上失败:

fin1 = fscanf(fp1, "%20[^,]%*c%d %*c %d%*c %c%*c", name1, &code1, &season, &relevant);

如果有帮助就好了。还有一些您所要求的输入:

输入:

The Universe,2,3,Y|Zoo,7,3,N|The Hobbit,10,2,Y|True Lies,12,25,N|Animals,22,2,Y| Euphoria,35,5,Y

代码:

FILE *fp1, *fserie;
char file1name[256], name1[21], relevant = 0, active = 0;
int code1, seasons, fin = 0,

while (1) {
puts("Enter First File Name:");
scanf("%s", file1name);

if (!(fp1 = fopen(file1name, "r")))
{
printf("error in opening file %s !!!\n", file1name);
continue;

} else break;
}

if (!(fserie = fopen("series.txt", "w")))
{
fclose(fp1);
exit(1);
}

do
{
fin1 = fscanf(fp1,"%20[^,]%*c %d%*c %d%*c %c%*c", name1, &code1, &season, &active1);

if (relevant == 'y')
fprintf(fserie,"%s,%d,%d\n", name1, code1, season);

} while (fin1 != EOF && fin2 != EOF);

最佳答案

您遇到的问题是您的格式字符串以及您未能根据每次迭代的所有 4 次成功转换来验证读取。对于您的格式字符串,您可以使用:

" %20[^,],%d,%d,%c|"

(前导空格是可选的,但如果在下一个名称之前的 '|' 后面有空格,则这是必需的。另请注意,如果最后一个 active 字符周围可能有空格,您可以通过包含来处理格式字符串中的一个空格用于消耗所有空格,例如 " %20[^,],%d,%d, %c |" )

读取包含多组电影信息的一行的示例可能是:

#include <stdio.h>

#define MAXN 21 /* if you need a constant, #define one (or more) */

int main (int argc, char **argv) {
char name[MAXN], active;
int code, seasons;
/* use filename provided as 1st argument (stdin by default) */
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

if (!fp) { /* validate file open for reading */
perror ("file open failed");
return 1;
}

while (fscanf (fp, " %20[^,],%d,%d,%c|",
name, &code, &seasons, &active) == 4) {
printf ("\nname : %s\ncode : %d\nseason : %d\nactive : %c\n",
name, code, seasons, active);
}

if (fp != stdin) /* close file if not stdin */
fclose (fp);
}

输入文件示例

$ cat dat/movies.txt
The Universe,2,3,Y|Zoo,7,3,N|The Hobbit,10,2,Y|True Lies,12,25,N|Animals,22,2,Y| Euphoria,35,5,Y

示例使用/输出

$ ./bin/readmovies dat/movies.txt

name : The Universe
code : 2
season : 3
active : Y

name : Zoo
code : 7
season : 3
active : N

name : The Hobbit
code : 10
season : 2
active : Y

name : True Lies
code : 12
season : 25
active : N

name : Animals
code : 22
season : 2
active : Y

name : Euphoria
code : 35
season : 5
active : Y

仔细检查一下,如果您还有其他问题,请告诉我。有多种方法可以做到这一点,但这是最接近原始方法的。

关于c - 扫描和扫描文件中的数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59725846/

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