【发布时间】:2019-06-04 08:30:14
【问题描述】:
我正在使用 fscanf 扫描格式化的 .srt 文件,但是我遇到了一个无法解决的问题,因为我对 C 还很陌生。
我曾尝试逐个字符地读取文件,但它最终变得一团糟,我无法调试
if (input == NULL)
{
printf("File doesn't exist, exiting!\n");
exit(1);
}
printf("File opened!\n");
int order; //number of line
int csh; //hh
int csm; //mm
int css; //ss
int csms; //ms
int ceh; // same order as above
int cem;
int ces;
int cems;
char* text = calloc(256, sizeof(char));
char c;
int count = 0;
while ((i = fscanf(input, "%d\n%d:%d:%d,%d --> %d:%d:%d,%d\n%10s", &order, &csh, &csm, &css, &csms, &ceh, &cem, &ces, &cems, text) > 0) )
{
count++;
printf("%d\n%d:%d:%d,%d --> %d:%d:%d,%d\n%s", order, csh, csm, css, csms, ceh, cem, ces, cems, text);
if (count == 2)
{
int xyx;
scanf_s("%d", &xyx);
}
}
所以我正在尝试读取格式化文件并将数据存储在双向链表中,文件看起来像这样
等等。文件很大,我相信 Phantom Menace 的整个字幕,所以我有两个问题,我的代码在完成时没有读取整个文本,其次,它没有超过我使用的 2 的计数器只是为了测试程序。
【问题讨论】:
-
在尝试读取巨大的字幕文件之前,您应该尝试解析为您制作的示例数据,例如只有两行文本。请注意,
%10s语法将在文本中找到空格后立即停止阅读文本。您应该阅读 sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html 以了解有关scanf函数系列的更多信息 -
将文本发布为 text 比将文本作为图片发布更有用。
-
OT:一般来说,最好遵守打印页面的右边距。 (通常为 72 或 80 个字符)通过在
fscanf()函数和printf()函数的参数中的每个逗号后开始一个换行符,使用发布的代码很容易做到这一点 -
OT: about:
printf("File doesn't exist, exiting!\n");这不会告诉用户错误的原因(它可能不是“文件不存在”建议使用:perror( "fopen failed" );,因为这将输出该错误消息和系统认为操作失败的文本原因。 -
OT:关于:
exit(1);您可能想了解:EXIT_FAILURE和EXIT_SUCCESS,如声明所揭示:#include <stdlib.h>