好的,我对这个问题的解决方案有两个问题,我希望可以得到一些帮助。问题本身是能够根据用户输入以特定格式打印#号。

我的问题是:


当我输入7时,它将输出正确的解决方案,但是当我输出8(或更高版本)时,无论出于什么原因,我的缓冲区都会在末尾添加一些垃圾,我不确定为什么会这样。我会添加一张图片,但是我没有足够的代表点:(
在我输入** HELPHERE **的代码中,我不确定为什么会给出正确的解决方案。我很困惑,因为在阅读的链接中(关于格式说明符),我认为1输入(在我的情况下为x)指定了您想要的空格数。我认为这会使解决方案达到x-n,因为随后的每一行都需要每次将空间段减少1。我是否了解数组以某种方式将其输入printf语句反转?我感到困惑是因为这意味着既然数组在循环的每次后续迭代中都增加1,它就会吞噬空间区域吗?




int main(void){

    printf("Height: ");
    int x = GetInt();
    int n = 1;
    int k=0;
    char buff[x];           /* creates buffer where hashes will go*/

    while(n<=x){            /* stops when getint value is hit*/
        while(k<n)              /* fill buffer on each iteration of loop with 1 more     hashtag*/
        {
            buff[k] = '#';
            k++;
        }

        printf("%*s",x, buff);  /*makes x number of spaces ****HELPHERE*****, then prints buffer*/
        printf("  ");
        printf("%s\n",buff);    /*prints other side of triangle */

        /*printf("%*c \n",x-n, '\0');*/

        n++;
    }

}

最佳答案

分配足够的内存,并确保该字符串以null结尾:

char buff[x+1];//need +1 for End of the string('\0')
memset(buff, '\0', sizeof(buff));//Must be initialized by zero

通过将空白字符串空白填充来按要求打印尽可能多的空白:

printf("%*s", x, "");



※第二项由乔纳森·莱夫勒(Jonathan Leffler)撰写。

关于c - 格式说明符Q和Mario金字塔算法解决方案中的独特错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25089452/

10-12 00:16
查看更多