标题:想要输出梯形,但是我写的代码是死循环,哪里错了?求大佬指教
只看楼主
霍霍霍1220
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-8-11
结帖率:100%
已结贴  问题点数:20 回复次数:7 
想要输出梯形,但是我写的代码是死循环,哪里错了?求大佬指教
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;
}
搜索更多相关主题的帖子: row int 输出 代码 printf 
2020-08-14 09:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
你把题目提出来看看呀,否则别人怎么知道你的代码要实现什么功能。
另外,你的代码有语法错误,没法编译成功。
2020-08-14 09:56
霍霍霍1220
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-8-11
得分:0 
1.输出梯形。输入一个高度h,然后在屏幕上输出一个上底为h(用*号 的个数表示),高度也为h(即h行)的梯形(向右侧对齐)。如输入:3,则输出梯形如下图:
    ***
  *****
*******
能编译,但是进去以后是死循环
2020-08-14 10:00
霍霍霍1220
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-8-11
得分:0 
#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;
}
这个能编译过去了,但是我还是没看出来那个为啥死循环
2020-08-14 10:01
霍霍霍1220
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-8-11
得分:0 
回复 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;
}
这个代码能行,但是我不知道那个为啥不行,求指教
2020-08-14 10:04
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:7 
while (scanf("%d", &num) != EOF) 

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

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

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

错误代码是row和EOF比较
而循环内部没有阻塞
也没有机会重新设置
进入循环的伤害 row不是EOF
整个循环流程里面row的值就永远不是EOF
所以死循环

https://zh.
2020-08-14 10:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用霍霍霍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编辑过]

2020-08-14 11:12
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:7 
EOF是ctrl+z,后面的代码正确的,但是输入不是数字的字符也会无限循环。

这种可以改成用gets



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

2020-08-14 11:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502847-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.109491 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved