请问为什么文本会输出两遍,如图

qq_19709335 2018-11-06 12:52:39
输入一次字母,会在字母三角上下分别出现一次case句文本,请问为什么。

代码如下:
#include <stdio.h>
int main()
{
char a,e;
int c,i,k;
int n=1;
scanf("%c",&a);
while(a!='#')
{
c=a-64;
if(a!='#')printf("case %d:\n",n);
for(i=1;i<=c;i++)
{
for(k=1;k<=i-1;k++)
{
printf(" ");
}
for(k=1;k<=c-i+1;k++)
{
e=k+64;
printf("%c",e);
}
for(k=c-i;k!=0;k--)
{
e=k+64;
printf("%c",e);
}
printf("\n");
}
n++;
if(a!='#')scanf("%c",&a);
}
}
...全文
178 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
只此冒泡君 2018-11-06
  • 打赏
  • 举报
回复
scanf 下面加个getchar(); 你的enter要别接收一下
赵4老师 2018-11-06
  • 打赏
  • 举报
回复
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。

云山大侠 2018-11-06
  • 打赏
  • 举报
回复
scanf() 要按回车,回车也算一次输入,会有一次跳过输入。
每次输入后加一句fflush(stdin);
清楚一下输入缓存
jdgdf566 2018-11-06
  • 打赏
  • 举报
回复
找几个地方测试即可
zangfong 2018-11-06
  • 打赏
  • 举报
回复
是因为你在输入时,输入的是"D(回车)",因此在缓冲区中,有D和回车两个字符。D运行完,接着就接收了回车,回车的ASCII码值是10,在运行c=a-64;之后c=-54,所以不执行for循环,然后输出完case #之后又等待你的输入了。你可以用getchar()把回车弃掉就好了。 如下:
#include <stdio.h>
int main()
{
    char a,e;
    int c,i,k;
    int n=1;
    scanf("%c",&a);
    while(a!='#')
    {
        getchar();
        c=a-64;
        //printf("c=%d\n",c);
        printf("case %d:\n",n);
        for(i=1; i<=c; i++)
        {
            for(k=1; k<=i-1; k++)
            {
                printf(" ");
            }
            for(k=1; k<=c-i+1; k++)
            {
                e=k+64;
                printf("%c",e);
            }
            for(k=c-i; k!=0; k--)
            {
                e=k+64;
                printf("%c",e);
            }
            printf("\n");
        }
        n++;
        scanf("%c",&a);
    }
}

33,320

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧