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

C语言中scanf使用%s读取字符串为何仅获取输入的第一个单词

scanf用%s仅读取第一个单词的原因
  • scanf 函数的 %s 格式符默认以空白字符(空格、制表符、换行符等)作为输入终止标记
  • 当读取过程中遇到第一个空白字符时,scanf 会直接终止当前字符串的读取,将已读取的内容末尾补\0后存入目标字符数组,空白字符及之后的所有内容会保留在输入缓冲区中,等待后续的输入操作读取
  • 示例中输入的Hello world中间存在空格,属于空白字符,因此scanf只会读取空格前的Hello存入str,最终输出时仅显示第一个单词
读取带空格的整行输入方案

如果需要完整读取包含空格的一行输入,推荐使用fgets函数,该函数默认以换行符作为读取终止标记,不会截断空格分隔的内容,参考代码如下:

#include <stdio.h>

int main()
{
    char str[20];
    printf("Enter a string : ");
    // 第二个参数为缓冲区最大长度,第三个参数指定从标准输入流读取
    fgets(str, sizeof(str), stdin);
    printf("String : %s", str);
    return 0;
}

内容的提问来源于stack exchange,提问作者Suresh Kumar M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:03