gpt4 book ai didi

c - 将文本文件加载到 C 程序中

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

我正在扫描该文件,但它有两种不同的结构。

文件:

ParisRoubaix "Marco MARCATO" 33 UAD ITA 26 5:43:31 
ParisRoubaix "Sam BEWLEY" 30 ORS NZL DNF 0

代码:

fscanf(filepointer, " %[a-zA-Z] %[a-zA-Z\" ] %d %[a-zA-Z] %[a-zA-Z] %[a-zA-Z1234567890]", )

但我不知道如何完成完成时间有两个结局

  • 时:分:秒
  • 0

那么我要扫描司机的时间吗,我该怎么做? <3

最佳答案

下面是一个将按照惯用方式处理您的文件的程序。按照惯例,%s 表示一个字符串。当涉及到使用 scanf 进行解析时,最好对你所接受的内容保持自由。对已读过的输入执行规则比理解 scanf 返回意外小值的原因更容易。此外,如果您的规则比“仅大写”更复杂,您很快就会需要正则表达式(3)。

就您而言,您可以使用一种模式解析时间。如果 fscanf 返回 9 个元素,则您有一个实时;如果是 7,则为零。其他任何内容都是错误。如果您的输入有很多行,您可能需要跟踪错误消息的行号。 :-)

#include <err.h>
#include <stdio.h>
#include <stdlib.h>
int
main( int argc, char *argv[] ) {
char id[64], name[64], thing2[8], thing3[8], seconds[8];
int ret, thing1, hour=25, min, sec;
FILE *input;

if( argc < 2 ) {
errx(EXIT_FAILURE, "filename?");
}
if( (input = fopen(argv[1], "r")) == NULL ) {
err(EXIT_FAILURE, "could not open %s", argv[1]);
}
while( (ret = fscanf(input, "%s %[a-zA-Z\" ] %d %s %s %s %d:%d:%d",
id, name, &thing1, thing2, thing3, seconds,
&hour, &min, &sec)) != EOF ) {
switch(ret) {
case 0:
errx(EXIT_FAILURE, "nothing' doin'");
break;
case 9:
printf("time is %d:%d:%d\n", hour, min, sec);
break;
case 7:
printf("%s in %d seconds\n", seconds, hour);
break;
default:
errx(EXIT_FAILURE, "found %d elements", ret);
break;
}
}
if( ferror(input) ) {
err(EXIT_FAILURE, "scan trouble"); // error in reading the file.
}
return EXIT_SUCCESS;
}

输出:

$ ./time input
time is 5:43:31
DNF in 0 seconds

关于c - 将文本文件加载到 C 程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47457133/

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