파일에서 읽는 프로젝트를 수행하도록 char가 지정되었으며 입력 한 char 값에 따라 다음 값을 사용하므로 + 다음 두 숫자가 추가되거나 H 그것은 지침을 인쇄합니다. 결과를 다른 파일로 출력하는 데 문제가 있습니다. void add(int a, int b, FILE *print)
과 같이 포인터를 각 함수에 전달하고 다음과 같이 호출합니다. add(a, b, printer)
, 파일을 인쇄하기 전에 완벽하게 작동했습니다. 기능 추가에 I가 얻을 오류 ...프로그래밍 포인터 문제 프로그래밍
는 :
error : incompatible type for argument 1 of fprintf
expected 'struct FILE *' but argument is of type 'FILE'
이 너무 내 모든 기능을 발생합니다.
여기 코드가 있습니다. 감사 !
#include <stdio.h>
#include <stdlib.h>
void add(int a, int b, FILE *print);
void add(int a, int b, FILE *print)
{
int c;
c = a + b;
printf("%i + %i = %i\n\n", a, b, c);
fprintf(*print, "%i + %i = %i\n\n", a, b, c);
}
void subtract(int a, int b, FILE *print);
void subtract(int a, int b, FILE *print)
{
int c;
c = a - b;
printf("%i - %i = %i\n\n", a, b, c);
fprintf(*print, "%i - %i = %i\n\n", a, b, c);
}
void multiply(int a, int b, FILE *print);
void multiply(int a, int b, FILE *print)
{
int c;
c = a * b;
printf("%i * %i = %i\n\n", a, b, c);
fprintf(*print, "%i * %i = %i\n\n", a, b, c);
}
void divide(int a, int b, FILE *print);
void divide(int a, int b, FILE *print)
{
double c;
c = (double)(a/b);
printf("%i - %i = %.1lf\n\n", a, b, c);
fprintf(*print, "%i - %i = %.1lf\n\n", a, b, c);
}
void help(FILE *print);
void help(FILE *print)
{
printf("+ i j [Integer Add]\t\tAdds integers i and j and print out result\n\n");
printf("* i j [Integer Multiply]\tMultiply integers i and j and print out result\n\n");
printf("- i j [Integer Subtract ]\tSubtract integer j from i and print out result\n\n");
printf("/ i j [Integer Divide ]\t\tDivide integer i by j and print out result of integer division\n\n");
printf("H [Help ]\t\t\tPrint a short synopsis of all the available commands\n\n");
printf("Q [Quit ]\t\t\tQuit\n\n");
printf("\n\n");
fprintf(*print, "+ i j [Integer Add]\t\tAdds integers i and j and print out result\n\n");
fprintf(*print, "* i j [Integer Multiply]\tMultiply integers i and j and print out result\n\n");
fprintf(*print, "- i j [Integer Subtract ]\tSubtract integer j from i and print out result\n\n");
fprintf(*print, "/ i j [Integer Divide ]\t\tDivide integer i by j and print out result of integer division\n\n");
fprintf(*print, "H [Help ]\t\t\tPrint a short synopsis of all the available commands\n\n");
fprintf(*print, "Q [Quit ]\t\t\tQuit\n\n");
fprintf(*print, "\n\n");
}
char quit(void);
char quit(void)
{
char user;
printf("Do you really want to quit?(y/n): ");
scanf(" %c", &user);
return user;
}
int main()
{
char trigger;
char user;
char fname;
char lname;
int a;
int b;
FILE *myPointer;
FILE *printer;
myPointer = fopen("CommandsProj1.dat", "r");
printer = fopen("results.dat", "w");
if (myPointer == NULL)
{
printf("error opening the file");
fprintf(printer, "error opening the file");
}
else
{
fscanf(myPointer, " %c%c", &fname, &lname);
printf("Initials %c%c\n\n\n", fname, lname);
while(user != 'y')
{
fscanf(myPointer, " %c", &trigger);
switch(trigger)
{
case '+':
fscanf(myPointer, "%i%i", &a,&b);
add(a,b,myPointer);
break;
case '-':
fscanf(myPointer, "%i%i", &a, &b);
subtract(a,b,myPointer);
break;
case '/':
fscanf(myPointer, "%i%i", &a,&b);
divide(a,b,myPointer);
break;
case '*':
fscanf(myPointer, "%i%i", &a,&b);
multiply(a,b,myPointer);
break;
case 'H':
help(myPointer);
break;
case 'Q':
user = quit();
}
}
}
return 0;
}
는 오류가 말한대로 변경 * 인쇄는 fprintf와에서 인쇄 마십시오. –