gpt4 book ai didi

c - 到达 '.' 时如何停止读取 C 中的多行文件?

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:55 27 4
gpt4 key购买 nike

我正在使用 C 语言实现字典,这需要我读入包含单词和定义的多行文件。我可以让文件正确读入,但不是 EOF,而是一个句号。用于标记文件的结尾。我试图阻止程序在文件到达 .但无济于事。

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

#define MAX_WORD_SIZE 40
#define MAX_DESC_SIZE 200

int d_read_from_file(const char * filename){
char dbuffer[MAX_WORD_SIZE+MAX_DESC_SIZE+2];
char word[MAX_WORD_SIZE+1];
char meaning[MAX_DESC_SIZE+1];
int i = 0;

FILE *file = fopen(filename, "r");
if (file == 0)
{
printf("Could not open file\n");
return 0;
}
while((fgets(dbuffer, sizeof(dbuffer), file))) {
if (strcmp(word, ".") == 0) {
break;
}
sscanf(dbuffer, "%s %[^\n]",word, meaning);
printf("%s\n", word);
printf("%s\n", meaning);
}
return 1;
/* d_read_from_file(filename);*/
}

int main(int argc, char ** argv)
{
int i;
for (i=1; i<argc; i++)
d_read_from_file(argv[i]);
}

我知道代码现在看起来有点乱,但我只是想让它在遇到 .性格。

这是一个输入示例:

computer Electronic device for processing data according to instructions
playground Area of outdoor play or recreation
plateau Land area with high, level surface
aardvark Unfriendly, nocturnal mammal native to Africa
.

以及我从我编写的代码中获得的输出:

computer
Electronic device for processing data according to instructions
playground
Area of outdoor play or recreation
plateau
Land area with high, level surface
aardvark
Unfriendly, nocturnal mammal native to Africa
.
Unfriendly, nocturnal mammal native to Africa

它似乎再次围绕循环继续并使用 .作为单词,然后打印出要读入的最后一个含义。关于如何解决这个问题有什么想法吗?另外,如果有更有效的方法来做我正在做的事情,那么也请告诉我。

最佳答案

在从 dbuffer 中提取它之前,您正在检查 word。它仍然具有上次循环的值。

由于最后一行可能包含也可能不包含换行符,最简单的方法是在继续之前针对两个版本检查 dbuffer:

while((fgets(dbuffer, sizeof(dbuffer), file))) {
if ((strcmp(dbuffer, ".") == 0) || strcmp(dbuffer, ".\n") == 0) {
break;
}

// ...
}

关于c - 到达 '.' 时如何停止读取 C 中的多行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845810/

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