我目前正在处理C中USACO的一个旧编码问题。以下是我代码的前几行,其中我试图使用fscanf()
函数从blocks.in
文件中获取第一个值int
:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fin = fopen ("blocks.in", "r");
FILE *fout = fopen ("blocks.out", "w");
int i,j;
int linecount = 0;
int alphabetCount[26];
fscanf(fin," %d",&linecount);
运行gdb(作为Eclipse C/C++IDE的一部分)时,我总是在以下行中得到一个分段错误:
fscanf(fin," %d",&linecount);
错误始终显示:
没有可用于"flockfile()at 0x7fff855e6d39"的源
我无法找到问题的来源。我过去对此没有任何问题。您是否发现了问题,或者有更好的解决方案/功能来提取数据?
我怀疑运行程序的目录中没有blocks.in
文件。即使文件存在,也可能无法成功打开。一些简单的错误检查可以帮助您避免这里的问题:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *fin;
FILE *fout;
int i,j;
int linecount = 0;
int alphabetCount[26];
if ((fin = fopen("blocks.in", "r")) == NULL) {
fprintf(stderr, "Unable to open input filen");
exit(EXIT_FAILURE);
}
if ((fout = fopen("blocks.out", "w")) == NULL) {
fprintf(stderr, "Unable to open output filen");
exit(EXIT_FAILURE);
}
fscanf(fin," %d",&linecount);
return 0;
}