我不知道出了什么问题。 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
答案 0 :(得分:2)
函数fscanf
(实际上所有scanf
- 变体)期望,对于每个格式说明符,内存地址可以存储读入的值。所以传递给scanf
的参数总是必须是指向值的指针,而不是值。
它适用于变量a
和b
但不适用于c
的原因是a
和b
用作指向内存块的指针连续20个字符,而c
包含整数值(不是指针)。
要解决此问题,请编写fscanf(fp,"%s %s %d\n", a,b,&c);
,以便提供存储c
值的内存,而不是c
本身的值。
希望这有帮助。