键入'char *'但参数的类型为'char',数据也不打印到文件

时间:2017-02-28 08:45:15

标签: c printf compiler-warnings

嘿大家我收到第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      }

3 个答案:

答案 0 :(得分:1)

似乎在第41行。您声称使用char *格式打印c字符串(类型%s),但提供了char个参数,即name[p]和{{ 1}}。选择使用symbol[p]打印单个char或将%cname作为参数。

答案 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' *'类型,这必须有帮助。