2011-03-31 213 views
2

我正在从文件加载矩阵,这里出现了问题,如何处理加载文件时是否会出现错误,如果会有字母而不是数字?我特别要问 - 如何确定,我装的是信件?fscanf C - 确定字母代替数字

THX

+0

您可以格式化你尝试用fscanf()函数读什么,你可以给你如何尝试一个例子使用它? – fnokke 2011-03-31 14:57:58

回答

3

如果fscanf()读出的输入不匹配所期望的类型(如由转换说明确定),这将通过fscanf()的返回值(它等于被报告覆盖范围说明符数成功阅读)。

int x; 
if (fscanf(file, "%d", &x) != 1) 
{ 
    // input was not a number 
} 

更一般地说,整个scanf()系列函数的主要目的是读取空格分开,琐碎的数据。通常阅读完整的一行(使用fgets()),然后在内部进行解析更为简单可靠。 (strtol()strtod()能有所帮助在这里,但strtok()应小心使用,尤其是在多线程环境。)

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