c - 编程指针问题

标签 c function pointers project

我被指派做一个从文件中读取的项目,根据它输入的字符,它对以下值做了什么,所以如果它读取+,它将添加接下来的两个数字,或者如果它是一个 H,它将打印说明。我无法将结果打印到另一个文件,我将指针传递给每个函数,如下所示 void add(int a, int b, FILE *print),并按如下方式调用它.. add(a, b, printer),在我尝试打印到文件之前它运行良好。我得到的错误是...

在函数中添加:

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;
}

最佳答案

您正在将 FILE * 取消引用到 fprintf。这不是必需的(甚至是错误的),因为 fprintf 需要一个指针。将打印行更改为:

fprintf(print, ...);

关于c - 编程指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202176/

相关文章:

c - 此 Makefile 上未运行一条规则

pointers - 函数参数: copy by value or by pointer中的指针

c++ - 通过指向虚基类的指针访问模板类的模板成员函数?

c - gcc 为不同的文件名生成不同的结果

c - 检测msvc标准库

c - 如何在C中伪造用户输入

c - 如何在C中正确引用?我似乎没捕获重点

Java - 如何检查字符串中的重复字符?

perl - 为什么 Perl 5 的函数原型(prototype)不好?

c - 分配内存给 int *a[13][13] 类型的变量