警告:格式'%d'需要类型'int *'的参数,但参数5的类型为'int'[-Wformat =]

时间:2017-01-18 11:36:17

标签: c++ c linux file

我不知道出了什么问题。 Imo它是正确的,但我有这样的问题。 这是我在C中连接文件的第一个程序,我不知道,我做错了什么。

2.c: In function ‘main’:
2.c:15:11: warning: format ‘%d’ expects argument of type ‘int *’, but argument 5 has type ‘int’ [-Wformat=]
 fscanf(fp,"%s %s %d\n", a,b,c);
           ^

我的节目

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *fp;
    FILE *fb;
    char z;
    char a[20], b[20];
    int c;
    fp=fopen("data.txt","r");
    fb=fopen("bigmoney.txt","a");
    while (z!=EOF)
    {
        z=fgetc(fp);
        fscanf(fp,"%s %s %d\n", a,b,c);
        if (c > 2000)
            fprintf(fb,"%s %s %d\n", a,b,c);
    }
}

文件data.txt

Jan Nowak 2000
Irena Pierwsza 3000
Irena Druga    2500
Krzysztof Mrugala 3500
Tadeusz Pat 2000
Emiliusz Jeden 1200
Adam Arma 6000
Kornel Robo 5000
Jan Kowalski 15000
agf dahf 524
sdgdagf adgdagf 345345
adgadgf dfdfgh 1168510135
arek kowalski 3300

1 个答案:

答案 0 :(得分:2)

函数fscanf(实际上所有scanf - 变体)期望,对于每个格式说明符,内存地址可以存储读入的值。所以传递给scanf的参数总是必须是指向值的指针,而不是值。

它适用于变量ab但不适用于c的原因是ab用作指向内存块的指针连续20个字符,而c包含整数值(不是指针)。

要解决此问题,请编写fscanf(fp,"%s %s %d\n", a,b,&c);,以便提供存储c值的内存,而不是c本身的值。

希望这有帮助。