C: 格式指定类型'char *'

C: Format specifies type 'char *'

每当我 运行 以下代码时,我都会收到错误消息

"format specifies type char * but the argument has type int."

该程序应该打印特定字符的 n x n 正方形或三角形。我是 C 的新手,对此进行故障排除我运气不佳。

#include <stdio.h>
#include <ctype.h>

void print_square(int n, char c) {
    for (int i=0; i < n; i++) {
        for (int j; j < n; j++) {
            printf("%c", c);
    }
        printf("\n");
}
}

void print_triangle(int n, char c) {
    int count = 1;
    for (int i=0; i < n; i++) {
        for (int j; j < count; j++) {
            printf("%c", c);
    }
        count = count + 1;
        printf("\n");
    }
}

int main(int argc, const char * argv[]) {

int n;
char cmd;
char * c;

do {

    printf("Enter T for a triangle, S for a square, "
           "Q to quit: ");
    scanf("%c", &cmd);
    cmd = toupper(cmd);

    if (cmd == 'S' || cmd == 'T') {
        printf("Enter the size: ");
        scanf("%d", &n);
        printf("Enter the character: ");
        scanf("%c", *c); // error here

        if (cmd == 'S') {
            print_square(n, *c);
        }

        else {
            print_triangle(n, *c);
        }
    }

} while (cmd != 'T' && cmd != 'S' && cmd != 'Q');

return 0;
}

如您所指,错误确实在

  scanf("%c", *c);

您需要将有效指针传递给 char,为什么要取消引用?

注意:在你的例子中,你正在取消引用一个单元化的指针,它调用 undefined behavior,无论如何。

要有一个更好的方法(你真的不需要 c 作为一个指针)做一些像

  char c;
  scanf(" %c", &c);  //the leading space consumes the newline in input bufer

你应该可以开始了。

因此,您需要传递 c 而不是 *c,这是其他函数调用所要求的。