c,程序很短,16行报错
#include <stdio.h>//打印字母
# define char_line 7//每个字母的行数
void print_I();
char print_c();
int main()
{
int i,m,n;
printf("请输入两个字符间的间隔数目(空格数目):");
scanf("%d:",&i);
char letter;
letter = print_c();
for(m = 0; m < char_line ; m++)
{
printf("%s",*(letter + m));
}
print_c();
return 0;
}
char print_c()
{
char *letter = {
"##### \n",
"## ##\n",
"## \n",
"## \n",
"## \n",
"## ##\n",
"##### \n"};
return letter;
}
void print_I()
{
printf("###### \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf("###### \n");
} 你在想什么???letter+m 是一个字符耶! 我看不懂你要干什么。发题目。 永恒的蓝色梦想 发表于 2020-11-6 22:44
我看不懂你要干什么。发题目。
题目就是调用函数,横向打印两个字母 猪猪虾 发表于 2020-11-6 22:49
题目就是调用函数,横向打印两个字母
横向打印两个字母???#include<stdio.h>
int main(){printf("aa");return 0;}这个代码就行 报错帮你解决了,也能打印出两个字符了,但是不是横向的。错误的原因已经注释在代码里面了
#include <stdio.h>
//打印字母
# define char_line 7//每个字母的行数
void print_I();
char** print_c(); // 同 22 行
int main()
{
int i,m,n;
printf("请输入两个字符间的间隔数目(空格数目):");
scanf("%d:",&i);
char** letter;
letter = print_c();
for(m = 0; m < char_line ; m++)
{
printf("%s",*(letter + m));
}
print_I(); // print_c()
return 0;
}
char** print_c() // 修改的地方 返回值应该是char ** 而不是 char
{
static char *letter = { // 修改的地方, 弄成static的表示这个letter不再是临时变量了,print_c函数调用结束后,letter不会被回收
"##### \n",
"## ##\n",
"## \n",
"## \n",
"## \n",
"## ##\n",
"##### \n"};
return letter;
}
void print_I()
{
printf("###### \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf(" ## \n");
printf("###### \n");
}
https://ftp.bmp.ovh/imgs/2020/11/15ef0f373f99543e.png 把printf的s改成c shooan 发表于 2020-11-7 09:21
报错帮你解决了,也能打印出两个字符了,但是不是横向的。错误的原因已经注释在代码里面了
“”返回值应该是char ** 而不是 char“”
请问这里怎么理解 猪猪虾 发表于 2020-11-7 21:52
“”返回值应该是char ** 而不是 char“”
请问这里怎么理解
根据main里面的这个代码 // 我修改后的代码的第14行到第16行
for(m = 0; m < char_line ; m++)
{
printf("%s",*(letter + m));
}
可以知道,你想要把print_c 的返回值,也就是 letter给当成指向char的数组(也就是指针数组) 来用
而且,print_c 里面也把 letter 给声明成了 指向char的数组(也就是指针数组),所以返回值应该是char** 而不是 char shooan 发表于 2020-11-7 09:21
报错帮你解决了,也能打印出两个字符了,但是不是横向的。错误的原因已经注释在代码里面了
对楼上的代码的解读:
1.字符串数组letter,在char **print_c()函数中,letter是个临时变量,在main函数调用后,letter的内存会被释放,方法一就是楼上的的加static,方法二:定义一个全局的letter;
2.char *letter是个字符数组,函数返回应该是指针的指针,双重指针。
页:
[1]