gpt4 book ai didi

c - 将txt文件逐行读入char数组C

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:06 25 4
gpt4 key购买 nike

我知道这个问题已被问过几次,但从来没有以一种可以帮助我解决问题的方式。本质上,我正在读取四个文本文件,所有单个单词都由一个新行分隔,并希望将它们存储在一个 char 数组中。我首先计算文件中的行数,然后创建一个新的 char 数组,但对于我来说,我无法弄清楚如何让它正确读取。最后两行只是为了测试它是否正确读取了整个文件,它们总是返回 NULL 和问号符号。

我希望每一行都位于 char 数组中的下一个索引处。

任何帮助都会很棒!提前谢谢你。

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

void countAnagrams(char* fileName);

void main ()
{
char *fileNames[] = {"AnagramA.txt","AnagramB.txt","AnagramC.txt","AnagramD.txt"};

countAnagrams(fileNames[0]);
countAnagrams(fileNames[1]);
countAnagrams(fileNames[2]);
countAnagrams(fileNames[3]);
}

void countAnagrams(char* fileName)
{
int anagramCount = 0;
int ch, lines = 0;

//Count number of lines in file
FILE *myfile = fopen(fileName, "r");
do
{
ch = fgetc(myfile);
if(ch == '\n')
lines++;
}while(ch != EOF);

char contents[lines];
int i = 0;
for(i=1;i<lines;i++)
{
fscanf(myfile,"%s",contents[i]);
}
fclose(myfile);

printf("%.12s\n",fileName);
printf("number of lines: %d\n", lines);

printf("first thing: %s\n", contents[0]);
printf("last thing: %s\n", contents[lines-1]);
}

最佳答案

这里对您的代码稍作修改,可能会对您有所帮助。

要点:

  • 您可以使用 getline() 而不是 fscanf()fscanf() 可用于逐行读取,但需要明确检查行尾条件。 getline() 会自动执行此操作。
  • 正如 kaylum 所指出的,有必要在计算行数后将文件指针rewind() 返回到文件的开头。

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

    void countAnagrams(char* fileName);

    void main ()
    {
    char *fileNames[] = {"AnagramA.txt","AnagramB.txt","AnagramC.txt","AnagramD.txt"};

    countAnagrams(fileNames[0]);
    countAnagrams(fileNames[1]);
    countAnagrams(fileNames[2]);
    countAnagrams(fileNames[3]);
    }

    void countAnagrams(char* fileName)
    {
    int anagramCount = 0;
    int ch, lines = 0;

    //Count number of lines in file
    FILE *myfile = fopen(fileName, "r");
    do
    {
    ch = fgetc(myfile);
    if (ch == '\n')
    lines++;
    } while (ch != EOF);

    rewind(myfile);

    char *contents[lines];
    int i = 0;
    size_t len = 0;
    for(i = 0; i < lines; i++)
    {
    contents[i] = NULL;
    len = 0;
    getline(&contents[i], &len, myfile);
    }
    fclose(myfile);

    printf("%.12s\n",fileName);
    printf("number of lines: %d\n", lines);

    printf("first thing: %s\n", contents[0]);
    printf("last thing: %s\n", contents[lines-1]);
    }

关于c - 将txt文件逐行读入char数组C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459663/

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