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

C语言如何实现接收多格式合法用户输入并完成正确性校验

C语言多格式输入匹配解决方案

问题根源

你现有代码的核心问题是连续调用了两次scanf:第一个scanf读取第一次输入的内容后,第二个scanf仍会执行并等待新的输入,因此会出现需要输入两次才能输出结果的问题。同时原有逻辑没有覆盖第三个参数为浮点数的场景,也无法匹配Sarah 6 7.5这类合法输入。

实现方案

推荐先读取完整一行输入再做解析,避免scanf缓冲区残留或等待额外输入的问题,代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
    char input_buf[128];
    char name[10];
    int num1;
    float num2;
    int parse_ret;

    // 读取整行输入
    if (fgets(input_buf, sizeof(input_buf), stdin) == NULL) {
        printf("Failure");
        return 0;
    }

    // 解析输入内容,%f可同时兼容int和float类型的第三个参数
    parse_ret = sscanf(input_buf, "%s %d %f", name, &num1, &num2);
    if (parse_ret == 2 || parse_ret == 3) {
        printf("Pass");
        // 如需区分第三个参数类型可添加以下逻辑
        // if (parse_ret == 3) {
        //     if (num2 == (int)num2) {
        //         int num2_int = (int)num2;
        //         // 处理整数场景
        //     } else {
        //         // 处理浮点数场景
        //     }
        // }
    } else {
        printf("Failure");
    }
    return 0;
}

逻辑说明

  1. fgets会一次性读取用户输入的整行内容,不会等待额外输入,也不会留下输入缓冲区残留
  2. sscanf对内存中存储的输入行做解析,通过返回值判断匹配情况:
    • 返回2:成功匹配字符串+整数的第一种格式
    • 返回3:成功匹配字符串+整数+数值(整数/浮点数均可)的第二种格式
    • 其他返回值均判定为非法输入

该方案可正确匹配你给出的所有合法输入示例,输入任意合法内容后按回车即可直接输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:07