我想从这样的 txt 文件中读取浮点类型数:
American history 91 12.9% 8 1
但如果我读
fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);
它给了我一个错误,因为涉及到一个特殊字符。我应该怎么做才能只取出浮动部分?
我想从这样的 txt 文件中读取浮点类型数:
American history 91 12.9% 8 1
但如果我读
fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);
它给了我一个错误,因为涉及到一个特殊字符。我应该怎么做才能只取出浮动部分?
它不是因为百分号而失败,而是因为您的格式字符串错误。%s
不读取任意字符串,它读取字符直到第一个空格,即“American”。fscanf
之后会失败。提示:向上看[
。
为了克服这个%
问题,你需要做的就是在你的格式字符串中包含这个:(%f%%
读取一个浮点数,匹配一个%
)。
从手册页:
%
匹配文字 '%'。也就是说,格式字符串中的 %% 匹配单个输入的 '%' 字符。不进行任何转换(但初始空白字符被丢弃),并且不会发生分配。
例子:
#include <stdio.h>
int main() {
float a, b;
scanf("%f%%%f", &a, &b);
printf("%f, %f\n", a, b);
return 0;
}
输出:
$ gcc test.c && echo "1.2%3.4" | ./a.out
1.200000, 3.400000
使用反斜杠()作为转义字符
fscanf(file, "%s %d %f\% %d %d", 主要, &number1, &percentage, &number2, &number3);