使用fscanf读取文件中的整数

时间:2010-07-30 16:40:01

标签: c

gcc 4.4.4 c89

我有以下文件,其中包含姓名,年龄和性别。我想读一下这个时代。

"Bloggs, Joe" 34 M

我可以成功打开文件:

fp = fopen("input.txt", "r");
if(fp == NULL) {
    fprintf(stderr, "Failed to open file [ %s ]\n", strerror(errno));
    return 1;
}

我尝试阅读时代(34)。

int age = 0;
int result = 0;
result = fscanf(fp, "%d", &age);

但是,当我尝试打印结果时,我的年龄和结果总是为零。

非常感谢任何建议,

2 个答案:

答案 0 :(得分:11)

你没有做任何事情来跳过这个名字,因此它正在查看该文本,尝试将其转换为int并失败,因此返回值为0(0次转换成功)和变量中的值保持不变。您需要添加代码以跳过名称,然后读取年龄:

fscanf(fp, "%*c%*[^\"]\" %d", &age);

初始"%c"读取初始引用。 "%[^\"]\"读取下一个引号的字符(包括)。在这两种情况下,“*”表示将读取值但不存储在任何位置。之后,我们可以使用“%d”读取数字。

答案 1 :(得分:1)

字符串的格式不只是一个数字。如果您只想阅读年龄,请包含标题并将以下内容放在fscanf语句上方。

int ch=0;
while(((ch=fgetc(stream)))!=EOF && !isdigit(ch)){}
ungetc(ch,stream);