警告:格式"%d"需要类型为"int*"的参数,但参数5的类型为"in
warning: format ‘%d’ expects argument of type ‘int *’, but argument 5 has type ‘int’ [-Wformat=]
我不知道怎么了。我是对的,但我有这样的问题。这是我第一个用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
的参数必须始终是指向值的指针,而不是值。
它适用于变量a
和b
而不适用于c
的原因是a
和b
充当指向20个连续字符的存储块的指针,而c
保持整数值(而不是指针)。
为了克服这一点,请编写fscanf(fp,"%s %s %dn", a,b,&c);
,以便提供存储c
值的内存,而不是c
本身的值。
希望这能有所帮助。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何检测我何时向可变参数函数传递"std::string"而不是"c_str()"