C语言---星星金字塔

  • 简介
  • 代码
    • 输出结果
    • 注意

简介


输入一个数作为行数N,输出N行的星星*

代码


#include <stdio.h>

int main()
{
    int line=0;
    printf("请输入显示**行数\n");
    while(1)    //判断输入是否规范
    {
        scanf("%d",&line);
        if(line >0 && getchar() == '\n')    //判断输入数据有效性
        {
            break;
        }
        else
        {
            while (getchar()!= '\n');   //清空缓冲区
            printf("请输入正确行数:\n");
        }
    }

    for(int i = 1;i<= line;i++)
    {
        for(int j = 1;j <= line-i;j++)//打印空格
        {
            printf(" ");
        }
        for(int k = 1;k <= i*2-1;k++)//打印*
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

输出结果


注意

输入行数为0、负数、字符abc、数学夹杂字符如12abc、a1、-1abc等均为不合法输入,所以通过如下的方法判断用户输入是否规范

    while(1)    //判断输入是否规范
    {
        scanf("%d",&line);
        if(line >0 && getchar() == '\n')    //判断输入数据有效性
        {
            break;
        }
        else
        {
            while (getchar()!= '\n');   //清空缓冲区
            printf("请输入正确行数:\n");
        }
    }

if(line >0 && getchar() == '\n')
判断line是否大于0,getchar获取scanf读取数字后的下一位是否为“\n”,如果是则合法,如果不是,那么用户输入情况可能是123abc这样的无合法输入
在else中while (getchar()!= '\n'); 用于清空缓冲区,scanf是不会清空缓冲区的,如果输入内容为a123这样的情况时,虽然判断出输入不合法但是进入下一次循环时缓冲区中第一个依然是a,会导致死循环,所以要调用while (getchar()!= '\n'); 清空缓冲区。

更多推荐

C语言---星星金字塔