注册 登录
编程论坛 C语言论坛

想要输出梯形,但是我写的代码是死循环,哪里错了?求大佬指教

霍霍霍1220 发布于 2020-08-14 09:51, 1938 次点击
int main()
{
    int row;
    scanf("%d",&row);
    while(row != EOF)
    {
        int i;
        for(i = 1; i <= row; i++)
        {
            int t;
            for(t=1; t<= 2*(row-1)-2*(i-1);t++)
            {
                printf(" ");
            }
            int j
            for(j= 1;i<=2*(i-1)+row; j++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}
7 回复
#2
rjsp2020-08-14 09:56
你把题目提出来看看呀,否则别人怎么知道你的代码要实现什么功能。
另外,你的代码有语法错误,没法编译成功。
#3
霍霍霍12202020-08-14 10:00
1.输出梯形。输入一个高度h,然后在屏幕上输出一个上底为h(用*号 的个数表示),高度也为h(即h行)的梯形(向右侧对齐)。如输入:3,则输出梯形如下图:
    ***
  *****
*******
能编译,但是进去以后是死循环
#4
霍霍霍12202020-08-14 10:01
#include<stdio.h>
int main() {
    int num;
    while (scanf("%d", &num) != EOF) {
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= 2*(num-1) - 2*(i-1); j++) {
                printf(" ");
            }
            for (int t = 1; t <= 2*(i-1)+num; t++) {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}
这个能编译过去了,但是我还是没看出来那个为啥死循环
#5
霍霍霍12202020-08-14 10:04
回复 2楼 rjsp
1.输出梯形。输入一个高度h,然后在屏幕上输出一个上底为h(用*号 的个数表示),高度也为h(即h行)的梯形(向右侧对齐)。如输入:3,则输出梯形如下图:
    ***
  *****
*******
能编译,但是进去以后是死循环
#include<stdio.h>
int main() {
    int num;
    while (scanf("%d", &num) != EOF) {
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= 2*(num-1) - 2*(i-1); j++) {
                printf(" ");
            }
            for (int t = 1; t <= 2*(i-1)+num; t++) {
                printf("*");
            }
            printf("\n");
        }
    }
    return 0;
}
这个代码能行,但是我不知道那个为啥不行,求指教
#6
lin51616782020-08-14 10:19
while (scanf("%d", &num) != EOF)

被你改为
scanf("%d",&row);
while(row != EOF)

这两段代码含义完全不一样

正确代码是scanf返回值和EOF比较
scanf满足特定条件就会返回EOF
循环就会终止
scanf在stdin没数据可获取的时候会阻塞
所以不会不停的输出

错误代码是row和EOF比较
而循环内部没有阻塞
也没有机会重新设置
进入循环的伤害 row不是EOF
整个循环流程里面row的值就永远不是EOF
所以死循环
#7
rjsp2020-08-14 11:12
以下是引用霍霍霍1220在2020-8-14 10:04:28的发言:

1.输出梯形。输入一个高度h,然后在屏幕上输出一个上底为h(用*号 的个数表示),高度也为h(即h行)的梯形(向右侧对齐)。如输入:3,则输出梯形如下图:
    ***
  *****
*******


程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned h; scanf("%u",&h)==1; )
    {
        for( unsigned i=0; i!=h; ++i )
        {
            printf( "%*s", 2*(h-1-i), "" );
            for( unsigned j=0; j!=h+2*i; ++j )
                putchar( '*' );
            putchar( '\n' );
        }
    }
}


[此贴子已经被作者于2020-8-14 11:14编辑过]

#8
apull2020-08-14 11:15
EOF是ctrl+z,后面的代码正确的,但是输入不是数字的字符也会无限循环。

这种可以改成用gets



[此贴子已经被作者于2020-8-14 11:34编辑过]

1