因此,此程序应根据您输入的数字打印出星号的数量,因此如果输入5,则会打印出5个星号。
我不知道我哪里出错了?另外,如果有人可以为C推荐一本好书,我会阅读我的学校文本和C读取傻瓜,我只是没有得到它。
void barplot(int num1, char array[]);
int main()
{
int n1;
printf("Enter a number: ");
scanf("%d",&n1);
printf("You have entered: %d\n",n1);
char astrk[n1];
strcpy(astrk, "*");
barplot(n1, astrk);
return(0);
}
void barplot(int num1, char array[])
{
printf("num1=%d\n",num1);
int i=0;
for(i=0; i<num1; i++)
{
printf("%c",array[i]);
}
}
编辑:每个作业需要一个数组
答案 0 :(得分:2)
鉴于您使用了数组,您可以使用astrk
使用'*'
字符填充memset
数组:
char astrk[n1];
memset(astrk, '*', n1);
barplot(n1, astrk);
return 0;
memset
用数字的副本(第二个参数)填充数组(第一个参数),直到第三个参数的长度。请注意,这不会使数组空终止,因此您无法直接printf
它。
如果你希望能够printf
它,那么你应该为null终止符分配足够的空间,如下所示:
char astrk[n1+1];
memset(astrk, '*', n1);
astrk[n1] = '\0'
printf("%s", astrk);
return 0;
然后你根本不需要barplot
功能。
答案 1 :(得分:1)
您不需要整个char
数组来存储一个字符。我们只需用char[]
替换char
:
void barplot(int num1, char array);
int main()
{
int n1;
printf("Enter a number: ");
scanf("%d", &n1);
printf("You have entered: %d\n", n1);
barplot(n1, '*');
return 0;
}
void barplot(int num1, char ch)
{
printf("num1=%d\n",num1);
int i;
for(i=0; i<num1; i++)
{
putchar(ch);
}
}
答案 2 :(得分:0)
您没有用星号填充astrk
数组。您刚刚复制了只有一个星号的字符串文字。
如果您只需要打印这些星号,为什么还需要一个阵列呢?
试试这个:
void barplot(int num1)
{
printf("num1=%d\n",num1);
for(i=0; i<num1; i++)
{
printf("*");
}
printf("\n");
}
答案 3 :(得分:0)
void barplot(int num1)
{
char s[BUFSIZ];
memset(s,'*',BUFSIZ);
printf("%.*s",num1%BUFSIZ,s);
}
答案 4 :(得分:0)
我想知道为什么没有提到标准c不允许可变长度数组。您可以在C99(ISO / IEC 9899:1999)中执行可变长度数组,但它们不是C ++或标准C的一部分。某些编译器可能会支持它,但总是存在风险。
除了我确定上面的问题是一个赋值,我的意图是在运行时确定的大小应该使用动态分配来处理,例如malloc。
char arr[SIZE]; // size has to be a constant value or a variable with const modifier
在上述语法的运行时无法确定大小。
您应该使用malloc作为标准练习
char *arr = malloc(n1);
后面也需要释放
free(arr);