嘿大家我收到第51行的警告“格式指定类型'char *'但参数的类型为'char'。我很难看到修复此错误的位置。此外,我的程序未能将新排序的数据打印到我的输出文件。我怎样才能让我的组织实现这一目标?
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <limits.h>
5
6 int main(void) {
7 const int N=200;
8 char name[N], symbol[N];
9 char printed[N];
10 int atomicNumber[N], n, i, p, j, min;
11 double atomicWeight[N];
12 FILE *fi;
13 FILE *fo;
14
15 fi=fopen("Lab6Elements.txt", "r");
16 if(fi==NULL) {
17 printf("Error opening file.\n");
18 return EXIT_FAILURE;
19 }
20 while(1){
21 n=0;
22 if(EOF == fscanf(fi,"%s%s%d%lf", &name[n], &symbol[n], &atomicNumber[n], &atomicWeight[n])) break;
23
24 printed[n]=0;
25 n++;
26 }
27
28 fo=fopen("OutputData.txt", "w");
29 fprintf(fo, "\n%-15s%4s%5s%10s\n", "Element","Symb","No.","Weight");
30 for(i = 0; i < n; i++){
31 min = INT_MAX;
32
33 for(j = 0; j < n; j++){
34
35 if(!printed[j] && atomicNumber[j]<min){
36 min = atomicNumber[j];
37 p = j;
38
39 }
40
41 fprintf(fo,"%-15s%-4s%5d%10.4lf\n", name[p], symbol[p], atomicNumber[p], atomicWeight[p]);
42
43 printed[p] = 1;
44 }
45
46 }
47 return EXIT_SUCCESS;
48 }
答案 0 :(得分:1)
似乎在第41行。您声称使用char *
格式打印c字符串(类型%s
),但提供了char
个参数,即name[p]
和{{ 1}}。选择使用symbol[p]
打印单个char
或将%c
和name
作为参数。
答案 1 :(得分:0)
在你的fprintf
中,作为格式字符串的一部分,有一些%s
说明符,它们将打印一个字符串,但作为相应的参数,例如name[p]
,这是一个单一字符。你很幸运,你的编译器抱怨。
在你的fscanf
中,你犯了同样的错误:用%s
读取字符串并将其分配给字符,尽管&name[n]
会产生一个放置字符串的地址,但是你仅指name
。
<小时/> 虽然您的原始问题已得到解答,但我在您的代码中看到了一个严重的问题:您分配了一个200个字符的数组,但您想要读取200个字符串! 你可以这样做:
char name[200][30]; // array of 200 strings of at most 30 characters
答案 2 :(得分:0)
示例中没有第51行,但我认为这是关于第41行fprintf。
参数name [p]和symbol [p]的类型为'char',但是对于compile必须是'char *',最简单的替换为(name + p)和(symbol + p)各自的'char' *'类型,这必须有帮助。