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
相关产品推荐
相关产品推荐

