2017-02-28 68 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 *'類型,這必須幫助。

相關問題