我已经完成了让我的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;
我完全不知道该怎么做。
答案 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
个功能。
fgets
比fscanf
更受欢迎,所以我就这样改了。
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。