gpt4 book ai didi

c - 从文本文件中读取索引

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

目前,我有一些代码可以从文本文件中读取每一行并将其打印在控制台中。 (例如面包2.10,牛奶3.30)

我如何修改它,只读取每行的第二个索引(为清楚起见,用粗体显示)(例如 2.10、3.30 和 5.50),然后我想将这些数字乘以 0.1 并覆盖同一个文件。

文件格式

面包2.10

牛奶3.30

5.50

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

int main()
{
int c;
FILE *file;
file = fopen("oText.txt", "r");
if (file) {
while ((c = getc(file)) != EOF){
putchar(c);
}
fclose(file);
}
}

最佳答案

以其最简单的形式,您希望将每一行读入字符数组(缓冲区),然后找到缓冲区中的最后一个空格,并从下一个字符输出到行尾。这将输出您案例中的第二个字段。

而不是使用面向字符的输入函数,如 getchar()fgetc()面向行输入函数,如 fgets()或 POSIX getline()一次将整行读入足够大小的缓冲区中。 (规则:不要吝惜缓冲区大小!!)面向行输入函数还读取并包含 '\n'它们填充缓冲区中每一行的末尾。一般来说,您需要修剪尾部 '\n'来自您存储的任何字符串 - 但您也可以利用它来提供 '\n'如果您所做的只是在读取值后立即输出它们。

找到最后一个' ' (空格)在你的缓冲区中,strrchr (字符串字符反向)函数(在 string.h 中提供)将返回指向您指定的最后一个字符的指针(或 NULL 如果在缓冲区中找不到该字符)这使您的工作非常简单。只需将每一行读入缓冲区,然后调用 strrchr (buf, ' ')获取指向缓​​冲区中最后一个空格的指针,然后只需从下一个字符打印到行尾即可。

阅读自stdin (您可以简单地将文件重定向到 stdin ),您的代码简化为:

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

#define MAXC 1024 /* if you need a constant, #define one (or more) */

int main (void) {

char buf[MAXC]; /* buffer (array of char) to hold line */

while (fgets (buf, MAXC, stdin)) { /* read each line */
char *lastspace = strrchr (buf, ' '); /* locate last space */
if (lastspace != NULL) /* if space located */
fputs (++lastspace, stdout); /* output from next char on */
}
}

(注意:如何使用 fputs 输出依赖于 '\n' 的行,该行由 buf 读取并包含在 fgets 中)

输入文件示例

不知道输入文件中是否有空白行,如图所示,它们被保留在原处(并且注意:它们会被优雅地跳过,因为 strrchr 将返回 NULL 当唯一的事情时buf 中是 '\n' )

$ cat dat/breadmilk.txt
Bread 2.10

Milk 3.30

Fish 5.50

示例使用/输出

使用 stdin 上传入的文件内容运行上面的代码结果如下:

$ ./bin/breadmilkcost < dat/breadmilk.txt
2.10
3.30
5.50

灵活的方法

另请注意,因为您要查找文件中的最后一个空格,而不是仅仅尝试读取第二个单词等,所以即使您的文件包含以下内容,此方法也同样有效并且具有相同的输出:

Bread (two loaves) - 2.10

Milk (one carton) - 3.30

Fish (Alaskan Sockeye) - 5.50

仔细检查并查找 fgets() 的手册页和 strrchr() 确保您了解事情是如何运作的。如果您还有疑问,请在下面发表评论,我很乐意为您提供进一步的帮助。

关于c - 从文本文件中读取索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847973/

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