我想编写一个代码来从代码文件中提取待办事项任务列表。它基本上是扫描代码文件并检测包含“TODO”字符串的行,然后将这些行写入文本文件。
到目前为止,我的代码是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE* f;
char line[200];
f = fopen("someFile.c", "r");
char c;
char str;
while(!feof(f)){
fgets(line,sizeof(line),f);
if(strstr(line, "TODO") != NULL)//Extracts every line with TODO
{
c=fgetc(f);//c = lines with TODO
}
}
fclose(f);
f= fopen("todoListFile.txt","w");
while(!feof(f))
{
fputs(c,f);//Writing the content of the c in to the text file.
}
fclose(f);
return 0;
}
当我运行此代码时,它会在1-2秒后崩溃。 我的错误可能在第二部分是获取那些“TODO”行并将其写入文本行。但我非常坚持那部分,不知道该怎么做。
注意:someFile.c
的内容基本上是一些带有“// TODO :
”
答案 0 :(得分:0)
规范几乎表明你必须打开两个文件,一个用于阅读,一个用于写入。当您从输入文件中读取一行时,如果该行包含TODO
,则需要将该行写入输出文件。这导致了直接的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char file1[] = "someFile.c";
char file2[] = "todoListFile.txt";
FILE *fp1 = fopen(file1, "r");
if (fp1 == NULL)
{
fprintf(stderr, "Failed to open file %s for reading\n", file1);
return 1;
}
FILE *fp2 = fopen(file2, "w");
if (fp2 == NULL)
{
fprintf(stderr, "Failed to open file %s for writing\n", file2);
return 1;
}
char line[200];
while (fgets(line, sizeof(line), fp1) != 0)
{
if (strstr(line, "TODO") != NULL)
fputs(line, fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
请注意,它会检查文件是否已成功打开,并在文件名失败时报告文件名,并以非零状态退出(如果您愿意,可以添加<stdlib.h>
并使用EXIT_FAILURE
)。
当运行(自己的)副本时,它会使todoListFile.txt
包含一行:
if (strstr(line, "TODO") != NULL)
对程序的简单修改将: