【发布时间】:2016-02-01 21:28:24
【问题描述】:
每当我运行以下代码时,我都会收到错误消息
"格式指定类型
char *,但参数的类型为int。"
该程序应该打印一个 n × 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;
}
【问题讨论】:
-
我相信
char *和char是有区别的 -
编译器还会输出一些其他警告:1) 未使用的参数
argv[]和未使用的参数argc。建议将 main() 的签名改为int main( void )2) 这一行:scanf("%c", *c);,参数多为地址指针,而不是内容。建议:scanf("%c", &c);同样c的声明也不正确。应该是:char c;不是char *c; -
应用我之前的评论,也意味着对
print_square()和print_triangle()的调用应该有第二个参数c,而不是*c。
标签: c pointers scanf format-specifiers