【发布时间】:2015-04-21 19:33:46
【问题描述】:
目前,我正在尝试从代表数独谜题解决方案的文件中读取数字。该文件应该被格式化为 9 个数字,中间没有空格,后跟一个换行符,在第 80 个数字之后结束。
在阅读时,我正在使用 fscanf,我可以让它与一个有效的谜题一起工作,但不能与一个不是有效格式的谜题一起工作;那些会产生分段错误。我试图检查数组的长度,但是由于在我声明 s 时它设置为 10,所以它不会捕获太短或太长的字符串。我会以错误的方式解决这个问题吗?我将在下面发布代码。
FILE* puzzlefile;
char s[10];
int i=0, j=0, skip;
int form;
//opens the file so we can access the puzzle
puzzlefile = fopen(argv[1], "r");
for (i=0; i<9; i++){
form = fscanf(puzzlefile, "%s\n",s);
for (j=0; j<10; j++){
if (form == 0){
printf("Invalid format on input. Bad newline.\n");
return 1;
}
if(j<9){
if(s[j] == '1' || s[j] == '2' || s[j] == '3' || s[j] == '4' || s[j] == '5' || s[j] == '6' || s[j] == '7' || s[j] == '8' || s[j] == '9'){
puzzle[i][j] = (int)(s[j]-'0');
}
else{
printf("Invalid format on input.\n");
return 1;
}
}
}
}
我是不是走错了路?如果是这样,我只是在滥用 fscanf() 吗?或者我应该使用其他类型的输入函数?我正在测试的文件包括一些遵循格式但使用字母而不是数字的文件,一个在第一行带有额外数字的拼图,一个每 5 个数字有换行符的拼图,以及一个全是数字而没有换行符的拼图。所有这些都会产生段错误。
【问题讨论】:
-
对于需要验证的输入,您可以手动进行,例如coliru.stacked-crooked.com/a/e00103b3fa514696
-
@sp2danny 不幸的是,这个特定程序的要求是它必须从这种特定格式的文件中读取,否则我会考虑这一点。不过感谢您的建议!
标签: c segmentation-fault