1

我想从这样的 txt 文件中读取浮点类型数:

American history 91 12.9% 8 1

但如果我读

fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);

它给了我一个错误,因为涉及到一个特殊字符。我应该怎么做才能只取出浮动部分?

4

3 回答 3

2

它不是因为百分号而失败,而是因为您的格式字符串错误。%s不读取任意字符串,它读取字符直到第一个空格,即“American”。fscanf之后会失败。提示:向上看[

为了克服这个%问题,你需要做的就是在你的格式字符串中包含这个:(%f%%读取一个浮点数,匹配一个%)。

于 2013-03-14T18:52:49.423 回答
1

手册页

%

匹配文字 '%'。也就是说,格式字符串中的 %% 匹配单个输入的 '%' 字符。不进行任何转换(但初始空白字符被丢弃),并且不会发生分配。


例子:

#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
于 2013-03-14T18:49:24.863 回答
0

使用反斜杠()作为转义字符

fscanf(file, "%s %d %f\% %d %d", 主要, &number1, &percentage, &number2, &number3);

于 2013-03-14T18:48:30.783 回答