为什么在使用%s时只扫描并存储输入句子中的第一个单词?

时间:2016-08-11 18:55:13

标签: c input

我正在尝试显示输入answer2的用户答案,但它只显示完整输入句子的第一个单词。

#include <stdio.h>
int main()
{ 
    char answer[20];
    char answer1[20];
    char answer2[100000];
    printf("What is your first name \n");
    scanf(" %s",answer);
    printf("What is your favorite color \n");
    scanf(" %s",answer1);
    printf("What is your quest \n");
    scanf(" %s",answer2);
    printf("Your name is %s,Your favorite color is %s,and your quest is s %s",answer,answer1,answer2);
    return 0;
}

Screenshot of Program running

1 个答案:

答案 0 :(得分:1)

带有%s的{​​p> scanf()会在遇到空白时停止扫描。因此,您无法使用它来扫描多个单词

使用%s

scanf()转化说明符引用标准
  

s匹配一系列非空白字符。

因此,它将扫描直到它在输入中找到空格。具有多个单词(由空格分隔)的输入将不会被完全扫描,只会扫描并存储第一个单词

相反,更好的方法是使用fgets()来扫描包含空格的输入,然后去除尾随换行符和标记化(如果需要)。