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

fscanf C-确定字母而不是数字,c,io,C,Io,我正在从文件中加载矩阵,现在有一个问题,如果加载文件时有字母而不是数字,该如何处理?我特别想问——如何确定,我装的信 Thx不要fscanf() fgets()和sscanf() 如果发生错误,您仍然拥有用于错误恢复的原始数据(或显示给用户,或其他任何内容) 并始终检查scanf函数系列的返回值 if (fscanf(stdin, "%d", &var) != 1) { /* oops */ } 如果fscanf()读取的输入与预期类型不匹配(由转换说明符确定),这将由fscanf(

我正在从文件中加载矩阵,现在有一个问题,如果加载文件时有字母而不是数字,该如何处理?我特别想问——如何确定,我装的信

Thx不要
fscanf()

fgets()
sscanf()

如果发生错误,您仍然拥有用于错误恢复的原始数据(或显示给用户,或其他任何内容)

并始终检查
scanf
函数系列的返回值

if (fscanf(stdin, "%d", &var) != 1) { /* oops */ }


如果
fscanf()
读取的输入与预期类型不匹配(由转换说明符确定),这将由
fscanf()
的返回值报告(该值等于成功读取的转换说明符的数量)


更一般地说,整个
scanf()。通常,更容易、更可靠的方法是读取完整的行(使用
fgets()
),然后在内部进行解析。(
strtol()
strtod()
在这里可能会有所帮助,但是
strtok()
应该小心使用,尤其是在多线程环境中。)

您可以使用fscanf()格式化您试图阅读的内容,您可以举一个如何使用它的示例吗?
if (fgets(buf, sizeof buf, stdin) == NULL) { /* oops */ }
if (sscanf(buf, "%d", &var) != 1) { /* oops */ }
int x;   
if ( fscanf( file, "%d", &x ) != 1 )
{
    // input was not a number
}