要求:
- 打印用" * "组成的X形图案;
 - 多组输入,一个整数(2~20),表示输出的行数,也表示组成"X"的反斜线和正斜线的长度
 - 针对每行输入,输出用" * "组成的X形图案。
 
- 示例:

scanf知识点里面的(目录中找到对应的):scanf返回值🔗 
            
            
              c
              
              
            
          
          记得自己敲一下代码,再看下面的答案,答案不唯一(不一定是最优解,仅作参考)
#include <stdio.h>
int main()
{
    int hang = 0;
    while (scanf("%d", &hang) == 1)
    //scanf会有返回值,返回的是成功读取到的个数,可以点击上面的链接进行这个知识点的了解
    
    //while (scanf("%d", &hang) != EOF);
    //上面那个注释掉的也可以,但不建议,下面有说明(有兴趣的可以了解)
    //EOR(-1)
    {
        for (int i = 1; i <= hang; i++)
        {
            for (int j = 1; j <= hang; j++)
            {
                if (j == i || (j + i) == (hang + 1))
                {
                    printf("*");
                }
                else 
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
        ❗️ scanf("%d", &hang) 的返回值规则
只是对%d的进行说明,后面如有碰到其他的会更新scanf返回值的知识点
| 输入情况 | 返回值 | 说明 | 
|---|---|---|
成功读取一个整数(例如 2, -1, 0) | 
1 | 
匹配成功 | 
遇到非数字(如 a, #, 4.5 中的 .) | 
0 | 
匹配失败,没有给 hang 赋值 | 
| 输入结束(按下 Ctrl+Z 或 Ctrl+D) | EOF(通常是 -1) | 
输入流结束 | 
while (scanf("%d", &hang) != EOF)
while(scanf("%d",&hang)==1)上面两个如果遇到下面这几种情况会有什么不同和要注意的点
- 下面如果是输入非整数类型的,会导致死循环,(浮点数那个有点特殊,其实前面的知识点有说 (scanf知识点里面的(目录中找到对应的):scanf介绍🔗)
 
- 
输入`'a'
- %d 期望数字,但遇到 
'a', scanf 无法匹配,返回 0。 - 'a' 留在输入缓冲区中(没有被吃掉)。
➡️- 对 != EOF 来说:0 != EOF → 条件成立 → 进入循环,但里面的代码再次读 'a' → 又失败 → 死循环。❌⚠️
 - 对 == 1 来说:0 == 1 → 条件不成立 → 循环立即退出。✅
 
 
 - %d 期望数字,但遇到 
 - 
输入 4.5
- 读取到 '4' 时开始匹配,遇到
'.'不是整数字符,匹配终止;返回 0,4.5 仍留在输入缓冲区
➡️- (同 'a' 情况一样)
 - != EOF → 死循环 ❌⚠️
 - == 1 → 退出循环 ✅
 
 
 - 读取到 '4' 时开始匹配,遇到
 
| 输入 | scanf 返回值 | 对 hang 的影响 | 1、while(scanf(...) != EOF) | 
2、while(scanf(...) == 1) | 
程序行为 | 
|---|---|---|---|---|---|
字符 a | 
0 | 
不改变(保留上次值) | ✅ 返回值 0 != EOF → 继续循环(可能死循环) | 
❌ 返回值不是 1 → 退出循环 | 第二种安全,第一种可能死循环 | 
浮点数 4.5 | 
0 | 
不改变 | ✅(同上) | ❌ | 同上,第二种更安全 | 
数字 -1 | 
1 | 
hang = -1 | ✅ | ✅ | 两种都进入循环(正常) | 
数字 0 | 
1 | 
hang = 0 | ✅ | ✅ | 两种都进入循环(正常) | 
数字 2 | 
1 | 
hang = 2 | ✅ | ✅ | 两种都进入循环(正常) | 
| Ctrl + Z(EOF) | EOF(-1) | 
不改变 | ❌(退出循环) | ❌(退出循环) | 两种都正常退出 | 
- 总结:
 
| 输入 | 返回值 | != EOF | 
== 1 | 
推荐 | 
|---|---|---|---|---|
| 合法整数(包括负数/0) | 1 | ✅ | ✅ | 两种都可 | 
| 非整数字符(a, #, 4.5) | 0 | ⚠️ 死循环 | ✅ 正常退出 | ✅ 推荐 | 
| EOF (Ctrl+Z) | EOF (-1) | ✅ 正常退出 | ✅ 正常退出 | ✅ 推荐 |