2017-02-28 4 views
-2

안녕하십니까, 저는 51 행에 경고 메시지가 나타납니다. 형식은 'char *'유형을 지정하지만 인수는 'char'유형입니다. 매우 힘든 시간이 오류를 수정하는보고는. 또한, 내 프로그램은 그것을 달성하기 위해 어떻게 조직을 chane 수 있습니다. 내 출력 파일에 새 정렬 된 데이터를 인쇄하려면 실패? 당신의 fprintf 당신이에서'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

프로그램에 줄 번호가 포함되어 있습니다 ... – StoryTeller

+1

다른 코드 대신 오류가 발생했을 때 컴파일 한 코드를 게시 할 수 있습니다 ... – Lundin

+0

오타를해서 죄송합니다 –

답변

0

형식 문자열의 일부로 일부 %s 지정자가 문자열을 인쇄하지만 대응하는 매개 변수로는 예를 들어 name[p]인데 하나의 문자입니다. 컴파일러가 불평해서 행운입니다.

fscanf%s으로 문자열을 읽고 그 문자를 char에 할당하는 실수를 반복합니다. &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

당신은 인쇄 주장 C-문자열 %s 포맷 (형식 char *)하지만 char 매개 변수, name[p]symbol[p] 즉 준 라인 (41)에있는 것으로 보인다. 단일 char%c과 함께 인쇄하거나 namesymbol을 매개 변수로 지정하십시오.

+0

입력 파일에서 줄이 인쇄되는 순서를 변경하고 싶습니다. 각 줄의 각 요소에 대해 이름과 기호가 있습니다. p 값에 해당하는 행을 인쇄하고 싶습니다. 각 줄은 요소 이름으로 구성되며 기호는 <= 4 글자, 원자 번호 및 원자량으로 구성됩니다. –

0

예제에는 행 51이 없지만이 행 41fprintf에 대해서는이 점을 생각합니다.

인수 이름 [p]와 기호 [p]의 유형은 'char'이지만 컴파일시 'char *'여야하며 가장 간단하게 (name + p) 및 (symbol + p) char * '형식을 사용하면 도움이됩니다.