使用数组打印出许多星号,取决于用户在C中输入的数字

时间:2012-10-14 08:28:31

标签: c arrays function

因此,此程序应根据您输入的数字打印出星号的数量,因此如果输入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]);
    }
}

编辑:每个作业需要一个数组

5 个答案:

答案 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);