警告:格式"%d"需要类型为"int*"的参数,但参数5的类型为"in

warning: format ‘%d’ expects argument of type ‘int *’, but argument 5 has type ‘int’ [-Wformat=]

本文关键字:quot 参数 类型 in 格式 警告 int      更新时间:2023-10-16

我不知道怎么了。我是对的,但我有这样的问题。这是我第一个用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 %dn", 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 %dn", a,b,c);
if (c > 2000)
fprintf(fb,"%s %s %dn", a,b,c);
}
}

文件数据.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

函数fscanf(实际上是所有的scanf变体)对于每个格式说明符,都需要一个内存地址,以便存储读入的值。因此,传递给scanf的参数必须始终是指向值的指针,而不是值。

它适用于变量ab而不适用于c的原因是ab充当指向20个连续字符的存储块的指针,而c保持整数值(而不是指针)。

为了克服这一点,请编写fscanf(fp,"%s %s %dn", a,b,&c);,以便提供存储c值的内存,而不是c本身的值。

希望这能有所帮助。