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

如何更优实现C语言中两个空格分隔数组的输入与输出?

嘿,我来帮你捋捋这个问题~你的代码能实现功能,但确实有不少可以优化的空间,不管是代码简洁度还是鲁棒性都能再提升一步。

先说说原代码的小隐患:你现在依赖输入末尾的换行符终止循环,但如果用户不小心多打了数字,或者输入结束时没有换行(比如直接按Ctrl+D),就会导致数组下标越界,触发未定义行为;另外手动处理temp字符的逻辑有点绕,可读性也不算高。

下面给你两种更优的实现方案,按需选择:

方案一:利用scanf自动跳过空白的特性,简化输入逻辑

其实scanf("%d")会自动跳过所有空白字符(包括空格、换行、制表符),完全不需要手动处理换行符。直接循环读取3次就行,代码简洁很多:

#include <stdio.h>

int main() {
    int alc[3] = {0}, bob[3] = {0};
    int i;

    // 输入Alice的3个数字
    printf("输入Alice的3个数字(空格分隔):");
    for (i = 0; i < 3; i++) {
        scanf("%d", &alc[i]);
    }

    // 输入Bob的3个数字
    printf("输入Bob的3个数字(空格分隔):");
    for (i = 0; i < 3; i++) {
        scanf("%d", &bob[i]);
    }

    // 输出Alice的数组
    printf("Alice的数组:");
    for (i = 0; i < 3; i++) {
        printf("%d ", alc[i]);
    }
    printf("\n");

    // 输出Bob的数组
    printf("Bob的数组:");
    for (i = 0; i < 3; i++) {
        printf("%d ", bob[i]);
    }
    printf("\n");

    return 0;
}

这个方案逻辑清晰,不管用户是把3个数字放一行,还是每个数字换一行输入,程序都能正确读取,完全不用操心换行符的问题。

方案二:按行读取+解析,提升鲁棒性

如果需要严格要求用户每行输入一组数字,或者想处理输入错误的情况(比如用户输入的数字不足3个),可以用fgets读取整行,再用sscanf解析里面的数字:

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

int main() {
    int alc[3] = {0}, bob[3] = {0};
    char line[100]; // 足够容纳一行输入
    int i, read_count;

    // 处理Alice的输入行
    printf("输入Alice的3个数字(空格分隔):");
    if (fgets(line, sizeof(line), stdin) != NULL) {
        // 从行里解析3个数字
        read_count = sscanf(line, "%d %d %d", &alc[0], &alc[1], &alc[2]);
        if (read_count < 3) {
            printf("提示:Alice的输入只读取到%d个数字\n", read_count);
        }
    }

    // 处理Bob的输入行
    printf("输入Bob的3个数字(空格分隔):");
    if (fgets(line, sizeof(line), stdin) != NULL) {
        read_count = sscanf(line, "%d %d %d", &bob[0], &bob[1], &bob[2]);
        if (read_count < 3) {
            printf("提示:Bob的输入只读取到%d个数字\n", read_count);
        }
    }

    // 输出结果
    printf("Alice的数组:");
    for (i = 0; i < 3; i++) {
        printf("%d ", alc[i]);
    }
    printf("\n");

    printf("Bob的数组:");
    for (i = 0; i < 3; i++) {
        printf("%d ", bob[i]);
    }
    printf("\n");

    return 0;
}

这个方案能确保我们处理的是用户输入的一整行,还能检查读取到的数字数量,避免因为输入格式问题导致程序出错,鲁棒性更强。

总结一下,如果只是简单的输入需求,方案一就足够好用;如果需要更严格的输入格式检查,方案二更合适~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:15:38