2017-02-28 67 views
-2

嘿大家我在51行上得到警告“格式指定类型'char *'但参数的类型为'char'。一个很很难看到哪里来修复这个错误。而且,我的项目未能在新排序的数据打印到我的输出文件。我怎样才能CHANE我的组织,以实现这一目标?类型'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

你的程序没有第51行,看到你包含行号... – StoryTeller

+1

也许发布你编译的代码,当你得到那个错误,而不是一些其他的代码... – Lundin

+0

抱歉的错字 –

回答

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 
+0

我想从我的输入文件中更改打印行的顺序。每行的每个元素都有一个名称和符号。我想打印对应于p值的行。每一行由一个元素的名称组成,它们的符号由<= 4个字母,原子序数和原子量组成。 –

+0

另外我还没有输出到我的输出文件 –

+0

您需要添加'fclose(fo);'关闭输出文件,一旦你完成。 –

1

似乎是在管线41你自称打印C字符串与%s格式(类型char *),但给了char参数,即name[p]symbol[p]。要么选择使用%c打印单个char,要么给出namesymbol作为参数。

+0

我想从我的输入文件中更改打印行的顺序。每行的每个元素都有一个名称和符号。我想打印对应于p值的行。每一行由一个元素的名称组成,它们的符号由<= 4个字母,原子序数和原子量组成。 –

0

在示例中没有第51行,但我认为这关于第41行fprintf。

参数名称[p]和符号[p]的类型为'char',但编译必须为'char *',最简单的取代为(name + p)和(symbol + p) char *'类型,这必须帮助。

相关问题