逐行阅读文本并为每行

时间:2017-01-26 02:21:23

标签: c file variables line

我已经完成了让我的c程序逐行阅读文本。这是最容易的部分,或者至少在我看来。我现在需要做的是为每行分配变量。例如,文本文件的第一行将等于变量line1。

或者这个

char line1 = (text from line one)
char line2 = (text from line two)

到目前为止我的代码:

    char line[1000] = ""; 

    FILE *ifp;

    ifp = fopen("Tree-B.txt", "r");
    if (ifp == NULL)
    {
        printf("Error opening file!\n");
        exit(1);
    }

    while (fscanf(ifp, "%s", line) == 1)
    {
        printf("%s ", line);
    }
    printf("\n");
    fclose(ifp);

    return 0;

我完全不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

你可以使用一个指针数组。

char line[1000] = "";  // assume each line has at most 999 chars (1 space for NUL character)
char *lines[1000] = { NULL }; // assume max number of lines is 1000
int idx = 0;
FILE *ifp;

ifp = fopen("q2.cpp", "r");
if (ifp == NULL)
{
    printf("Error opening file!\n");
    exit(1);
}

while(fgets(line, sizeof(line), ifp) != NULL)
{
    lines[idx] = strdup(line);
    printf("%s", lines[idx]);
    idx++;
}

注意:

  • 这种方法使用的是strdup POSIX(非官方C标准)。但是,您可以自行输入publicly available strdup个功能。

  • fgetsfscanf更受欢迎,所以我就这样改了。

  • 1000 limis是暗示性的 - 您可以/应该将这些常量更改为程序本身更有意义的内容。

答案 1 :(得分:0)

#include <stdio.h>

#define MAX_LINES 1000
#define MAX_LINE_LENGTH 200

int main()
{
    char fileContents[MAX_LINES][MAX_LINE_LENGTH];
    int lineCount = 0;

    FILE *ifp = fopen("Tree-B.txt", "r");
    if (ifp == NULL)
    {
        printf("Error opening file!\n");
        exit(1);
    }

    while (fgets(fileContents[lineCount++], MAX_LINE_LENGTH, ifp) != NULL);
    fclose(ifp);

    printf("File Contents:\n");
    for (int i = 0; i < lineCount-1; ++i)
    {
        printf("%s", fileContents[i]); // or fputs
    }

    return 0;
}

如果您希望为fileContents动态分配内存,可以参考here