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
,这是其他函数调用所要求的。
每当我 运行 以下代码时,我都会收到错误消息
"format specifies type
char *
but the argument has typeint
."
该程序应该打印特定字符的 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
,这是其他函数调用所要求的。