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);
但是,当我尝试打印结果时,我的年龄和结果总是为零。
非常感谢任何建议,
答案 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);