我正在从文件中加载矩阵,这里有一个问题,如果有字母而不是数字,如何处理加载文件中的错误?我特别想问 - 如何确定,我装了信?
THX
答案 0 :(得分:3)
如果fscanf()
读取的输入与预期类型(由转换说明符确定)不匹配,则将通过fscanf()
的返回值报告(这等于coversion说明符成功读取。)
int x;
if ( fscanf( file, "%d", &x ) != 1 )
{
// input was not a number
}
更一般地说,整个scanf()
函数族主要旨在读取空格分隔的平凡数据。通常,在完整的行中读取(使用fgets()
),然后在内部进行解析更容易和可靠。 (strtol()
和strtod()
在这里可以提供帮助,但应谨慎使用strtok()
,尤其是在多线程环境中。)
答案 1 :(得分:2)
不要fscanf()
。
fgets()
和sscanf()
。
如果出现错误,您仍然拥有用于错误恢复的原始数据(或显示用户或其他内容)
并始终检查scanf
函数族的返回值。
if (fscanf(stdin, "%d", &var) != 1) { /* oops */ }
if (fgets(buf, sizeof buf, stdin) == NULL) { /* oops */ }
if (sscanf(buf, "%d", &var) != 1) { /* oops */ }