fscanf C - 确定字母而不是数字

时间:2011-03-31 14:52:49

标签: c io

我正在从文件中加载矩阵,这里有一个问题,如果有字母而不是数字,如何处理加载文件中的错误?我特别想问 - 如何确定,我装了信?

THX

2 个答案:

答案 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 */ }