1

所以这个程序应该根据你输入的数字打印出星号的数量,所以如果你输入 5,5 个星号将被打印出来。

我不知道我哪里出错了?此外,如果有人可以推荐一本好书,我通读了我的学校课本和 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]);
    }
}

编辑:每个分配都需要一个数组

4

5 回答 5

2

鉴于您被困在使用数组中,您可以使用以下字符填充astrk数组:'*'memset

char astrk[n1];
memset(astrk, '*', n1);

barplot(n1, astrk);
return 0;

memset用字符(第二个参数)的副本填充数组(第一个参数),直到第三个参数中的长度。请注意,这不会以空值终止数组,因此您不能直接使用printf它。

如果您确实希望能够做到printf这一点,那么您应该为空终止符分配足够的空间,如下所示:

char astrk[n1+1];
memset(astrk, '*', n1);
astrk[n1] = '\0'

printf("%s", astrk);
return 0;

那么你根本不需要这个barplot功能。

于 2012-10-14T08:46:31.780 回答
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);
    }
}
于 2012-10-14T08:32:27.040 回答
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);
于 2012-10-14T09:28:24.900 回答
0

你没有astrk用星号填充你的数组。您刚刚复制了一个只有一个星号的字符串文字。

如果您只需要打印这些星号,为什么还需要一个数组呢?

尝试这个:

void barplot(int num1)
{
    printf("num1=%d\n",num1);

    for(i=0; i<num1; i++)
    {
        printf("*");
    }
    printf("\n");
}
于 2012-10-14T08:32:41.240 回答
0
void barplot(int num1)
{
  char s[BUFSIZ];
  memset(s,'*',BUFSIZ);
  printf("%.*s",num1%BUFSIZ,s);
}
于 2012-10-14T08:43:31.030 回答