You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scanf读取多值存入数组遇阻:需验证6整数并存储4个三角形坐标

嘿,我来帮你搞定这个scanf读取三角形坐标的问题!从你的描述来看,核心问题应该是输入验证不严谨和数组存储逻辑没捋顺这两点,咱们一步步来解决:

1. 先把输入验证做扎实:确保每次读到6个有效整数

scanf的返回值是成功读取的变量个数,这是验证输入是否有效的关键!每次调用scanf读取6个坐标后,一定要检查返回值是不是6——如果不是,说明用户输入了非整数或者数量不对,这时候必须清理输入缓冲区的垃圾数据,不然会干扰下一次读取。

举个验证的代码片段:

int read_result;
// 读取6个整数,对应三角形的(x1,y1,x2,y2,x3,y3)
read_result = scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3);
if (read_result != 6) {
    printf("输入出错啦!请输入6个整数形式的坐标\n");
    // 清空输入缓冲区里的残留字符(比如字母、多余的符号)
    while (getchar() != '\n');
    // 这里可以加循环让用户重新输入当前三角形的坐标
    continue;
}
2. 正确把坐标存入二维数组

因为要存4个三角形,每个6个坐标值,咱们可以定义一个二维数组int triangles[4][6];,每次读取到有效输入后,把6个值依次存入对应的数组行就行(注意数组索引从0开始,第1个三角形存在triangles[0],第4个在triangles[3])。

给你一个完整的示例代码,直接就能用:

#include <stdio.h>

int main() {
    // 定义二维数组:4个三角形,每个6个坐标值(x1,y1,x2,y2,x3,y3)
    int triangles[4][6];
    int triangle_idx;

    for (triangle_idx = 0; triangle_idx < 4; triangle_idx++) {
        printf("请输入第%d个三角形的6个坐标(格式:x1 y1 x2 y2 x3 y3):\n", triangle_idx + 1);
        
        // 读取6个坐标到当前三角形的数组行
        int read_count = scanf("%d %d %d %d %d %d", 
                            &triangles[triangle_idx][0], &triangles[triangle_idx][1],
                            &triangles[triangle_idx][2], &triangles[triangle_idx][3],
                            &triangles[triangle_idx][4], &triangles[triangle_idx][5]);
        
        // 验证输入是否有效
        if (read_count != 6) {
            printf("输入格式不对!请重新输入6个整数哦~\n");
            // 清空输入缓冲区,避免残留的错误字符影响下一次读取
            while (getchar() != '\n');
            triangle_idx--; // 让当前循环重新执行,重新输入当前三角形的坐标
            continue;
        }

        // 可选:打印验证一下存入的坐标是否正确
        printf("已成功存入坐标:");
        for (int coord_idx = 0; coord_idx < 6; coord_idx++) {
            printf("%d ", triangles[triangle_idx][coord_idx]);
        }
        printf("\n");
    }

    // 这里可以添加对triangles数组的后续处理逻辑(比如计算面积、判断形状等)
    return 0;
}
3. 常见坑点排查
  • 输入缓冲区残留问题:如果用户输入了字母、符号这类非整数,scanf会读取失败,这些垃圾字符会留在输入缓冲区里,导致下一次scanf直接读取到这些无效内容,所以必须用while(getchar() != '\n')清空缓冲区。
  • 数组越界问题:别搞混数组索引!4个三角形的索引是0到3,要是写成triangles[4]就会越界,引发程序异常。
  • 输入格式灵活性:scanf格式串里的空格会匹配任意空白字符(空格、换行、制表符),所以用户不管是一行输入6个值,还是分几行输入,只要是6个整数都能正确读取,这点不用纠结。

内容的提问来源于stack exchange,提问作者Ania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:10:25