关于C中scanf()函数读取字符串的问题

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     char s_name[20];
 6 
 7     scanf("%s", s_name);
 8     printf("Hello, %s!\n", s_name);
 9 
10     return 0;
11 }

 对于这段简单的代码,如果输入一个名字如:Stephen,很容易知道,其输出为:

Hello, Stephen!

这个很容易理解,但是输入更完整的名字如:Stephen Prata,那么输出结果又是什么呢?

按照上面的思路,其输出结果当然是:

Hello, Stephen Prata!

然而事实并非如此,其实际输出仍然是:

Hello, Stephen!

为什么呢?这是因为当scanf()函数读取字符串时,如果遇到空字符 空格(blank)、制表符(tab)或者换行符(newline),那么它将停止读取,也就是说,上述scanf()函数只会读取"Stephen"几个字符,而空格及其后的"Prata"将不被读取,所以最终s_name[]只会得到字符串"Stephen",最终结果就成了  Hello, Stephen!

posted @ 2015-09-11 19:00  幽曲  阅读(1425)  评论(5编辑  收藏  举报