gpt4 book ai didi

c - 从 C 语言的输入文件中读取特定短语

转载 作者:行者123 更新时间:2023-11-30 17:28:23 24 4
gpt4 key购买 nike

今晚的最后一个问题。我尽量不要在每次斗争中发布多次哈哈...

这个有点简单。

我有一个 txt 文件,前 8 行包含一系列排列好的数字。之后的每一行都是一个特定的短语,例如“购买元素”或“奖励元素”,后跟一个整数(有几个短语,但我只关心一个)。基本上我试图有一个 for 或 while 循环,我可以在其中检测文档中的短语,将指针设置到短语的末尾,然后 fscanf 短语右侧的整数。我遇到的唯一麻烦是让指针指向特定短语的末尾,然后读取数字。事实上,该短语在不同的行上重复,我不希望一次获取所有值。

我确信我可以做一个简单的

while (!feof(//function for reading phrase)) {
fscanf("%d", &value);
//rest of function

就是这样。但我尝试过 fseek 和 fget ,但没有任何东西能够真正帮助将指针指向我需要的位置,而无需预设要去的位置。输入文件每次都会不同,所以我不能只是告诉它向下移动 1024 个空格或类似的东西。只是不确定你会如何去做这件事......

下面是输入文件的示例。

75 75 908
10 10
18 23.10 10.09
70 5 15
8 100 20 28.99
30 40 50 60
4 6 8 8 5 5 5 6 7 10
10
BUY ITEM 8
BUY ITEM 10
AWARD ITEM 7
BUY ITEM 1
BUY ITEM 3
AWARD ITEM 9
BUY ITEM 7
RETURN ITEM 8

非常感谢任何人的帮助。

最佳答案

这里有一个简单的方法来做到这一点,利用这样一个事实:在有问题的行上,如果您的文件遵循相同的格式,那么数字将始终出现在该行的相同字符中。这有点脆弱,最好让你的程序更加健壮,例如处理任意数量的空白,但我将把它作为练习留给你:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 100
#define BUY_LEN 9
#define AWARD_LEN 11

int main(void) {
FILE * infile = fopen("file.dat", "r");
if ( !infile ) {
perror("couldn't open file");
return EXIT_FAILURE;
}

char buffer[MAX_LEN];
char * endptr;

while ( fgets(buffer, MAX_LEN, infile) ) {
if ( !strncmp(buffer, "BUY ITEM ", BUY_LEN ) ) {
char * num_start = buffer + BUY_LEN;
long item = strtol(num_start, &endptr, 0);

if ( endptr == num_start ) {
fprintf(stderr, "Badly formed input line: %s\n", buffer);
return EXIT_FAILURE;
}

printf("Bought item %ld\n", item);
}
else if ( !strncmp(buffer, "AWARD ITEM ", AWARD_LEN) ) {
char * num_start = buffer + AWARD_LEN;
long item = strtol(num_start, &endptr, 0);

if ( endptr == num_start ) {
fprintf(stderr, "Badly formed input line: %s\n", buffer);
return EXIT_FAILURE;
}

printf("Awarded item %ld\n", item);
}
}

fclose(infile);
return 0;
}

使用问题中的示例数据文件运行此命令,您将得到:

paul@local:~/src/sandbox$ ./extr
Bought item 8
Bought item 10
Awarded item 7
Bought item 1
Bought item 3
Awarded item 9
Bought item 7
paul@local:~/src/sandbox$

顺便说一句,根据您问题中的建议之一,您可能想查看问题 "while( !feof( file ) )" is always wrong 的答案.

关于c - 从 C 语言的输入文件中读取特定短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070089/

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