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

C语言中输入多词时首个scanf_s跳过第二个的问题咨询

问题原因分析

首先得搞清楚为啥会出现这个问题:scanf_s("%s") 是以空白字符(空格、回车、制表符)作为输入结束的标志。当你输入 John Cena 时,第一个 scanf_s 只会读取到 John,剩下的 Cena 和换行符 \n 会留在输入缓冲区里。接下来第二个 scanf_s("%s") 执行时,会直接读取缓冲区里的 Cena,根本不会等你输入IC/护照信息,看起来就像是被跳过了。

解决方案

下面给你几种可行的解决办法,你可以根据需求选择:

方法1:使用 fgets 读取整行输入,再配合 sscanf_s 处理

fgets 可以读取整行输入(包括空格),直到遇到换行符为止,这样就能完整获取用户输入的姓名(比如 John Cena)。之后如果需要格式化处理,可以用 sscanf_s 提取内容。注意要处理掉fgets读取到的换行符。

示例代码:

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

void main() { 
    char name[64], identity[64]; 
    printf("Welcome to ABC Computer Store!\n"); 
    printf("Please enter your name: "); 
    // 读取整行姓名,包括空格
    fgets(name, sizeof(name), stdin);
    // 去掉fgets读取到的换行符(如果存在)
    size_t len = strlen(name);
    if (len > 0 && name[len-1] == '\n') {
        name[len-1] = '\0';
    }

    printf("Please enter your IC/Passport: "); 
    fgets(identity, sizeof(identity), stdin);
    len = strlen(identity);
    if (len > 0 && identity[len-1] == '\n') {
        identity[len-1] = '\0';
    }

    // 测试输出
    printf("Name: %s\n", name);
    printf("IC/Passport: %s\n", identity);
}

方法2:使用 scanf_s 的 %[^\n] 格式说明符

%[^\n] 表示读取所有字符,直到遇到换行符 \n 为止,这样就能读取带空格的字符串。但要注意:

  • 必须加上宽度限制(比如 %62[^\n],因为数组大小是64,要留一个位置给终止符\0)
  • 第一个scanf_s执行后,缓冲区里会留下换行符,需要先清空缓冲区,否则第二个scanf_s会读到空内容。

示例代码:

#include <stdio.h>

void main() { 
    char name[64], identity[64]; 
    printf("Welcome to ABC Computer Store!\n"); 
    printf("Please enter your name: "); 
    // 读取所有字符直到换行,最多62个(留一个给\0)
    scanf_s("%62[^\n]", name, sizeof(name));
    
    // 清空输入缓冲区里的换行符
    int c;
    while ((c = getchar()) != '\n' && c != EOF);

    printf("Please enter your IC/Passport: "); 
    scanf_s("%62[^\n]", identity, sizeof(identity));

    // 测试输出
    printf("Name: %s\n", name);
    printf("IC/Passport: %s\n", identity);
}

注意事项

  • 不管用哪种方法,都要注意数组的边界,避免缓冲区溢出。比如fgets和scanf_s都要指定最大读取长度,不能超过数组的大小。
  • 如果用户输入的内容超过数组长度,两种方法都会截断多余的字符,你可以根据需求添加输入长度的检查逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:03