Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言中的循环生成x的楼梯,但我一直得到正方形_C_Loops_For Loop_Nested - Fatal编程技术网

用C语言中的循环生成x的楼梯,但我一直得到正方形

用C语言中的循环生成x的楼梯,但我一直得到正方形,c,loops,for-loop,nested,C,Loops,For Loop,Nested,所以我需要建造一个楼梯,但我的逻辑显然有问题。关于如何处理这个问题有什么建议吗?我最后只能得到正方形 #include <stdio.h> int main() { int a,b,z,y,p; char x; scanf("%i ", &a); printf("Number of stairs is: %i\n", a); printf("up: \n"); for(b=0; b<a; b++) {

所以我需要建造一个楼梯,但我的逻辑显然有问题。关于如何处理这个问题有什么建议吗?我最后只能得到正方形

#include <stdio.h>

int main()
{

    int a,b,z,y,p;
    char x;

    scanf("%i ", &a);
    printf("Number of stairs is: %i\n", a);
    printf("up: \n");

    for(b=0; b<a; b++) {
        for(z=1; a>=z; z++) {
            x='x';
            p=1;

            if ((p=z)) {
                printf("%c", x);
            }
            else {
                printf(" ");
            }               
            p++;
        }
        printf("\n");
    }
}

您的代码有许多缺陷,缺乏清晰性是其中之一。然而,之所以有一个正方形,是因为p=z总是真的,将p的值设置为z会返回z的值,在代码中,这个值总是1或更高-对于C标准来说是真的值

下面是一段代码,大致基于您的示例:

#include <stdio.h>

int main() {    
    int numberSteps,currentStep,currentColumn;    
    scanf("%i", &numberSteps);
    printf("Number of stairs is: %i\n", numberSteps);
    printf("up: \n");    
    for(currentStep=0; currentStep<numberSteps; currentStep++) {
        for(currentColumn=0; currentStep>=currentColumn; currentColumn++) {            
            printf("x");            
        }
        printf("\n");
    }
}

请注意,我更改了变量名,使它们变得有意义,并且在p=z时去掉了不必要的变量和不必要的测试,因为p=z会使代码变得混乱。

为什么在p=z时使用双括号?我猜您这样做是为了在最初编写if p=z时消除编译器警告。不要让那个警告保持沉默。去掉双括号,阅读编译器警告,并注意它。不要绕着它转。我去掉了括号,没有任何错误。不久前,当我被编译器困扰时,我把括号放在了里面,但现在已经不是这样了。有什么建议吗?你认为p=z是做什么的?x总是分配给char x,所以我只使用print x;取消char x其他人对p=z的看法是正确的,但另一个建议是,如果你给变量命名比a、b、z、y和p更有意义的话,代码可能更容易理解,也更容易正确。非常感谢。我是一个编程新手,这就是为什么我什么都不懂的原因。我会试试你的建议!