关于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!

时间: 2024-12-13 00:16:06

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

vs2013/2015中scanf函数类似于error C4996: &#39;scanf&#39;: This function or variable may be unsafe的安全检查错误

在使用vs2015时,遇到了scnaf函数安全性的问题,程序不能正常运行,错误如下: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 经调试,发现这个错误的原因是:scanf等类似的函数已经不太

python中format函数用于字符串的格式化

python中format函数用于字符串的格式化 通过关键字 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 grade = {'name' : '陈某某', 'fenshu': '59'} print('{name}电工考了{fenshu}'.format(**grade))#通过关键字,可用字典当关键字传入值时,在字典前加**即可 通过位置 print('{1}今天{0}'.format('拍视频','陈某某'))#通过位置 print

python中format函数格式化字符串的用法

转载自: http://www.jb51.net/article/105933.htm 前言 Python 在 2.6 版本中新加了一个字符串格式化方法: str.format() .它的基本语法是通过 {} 和 : 来代替以前的 %.. 格式化时的占位符语法: ? 1 replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}" &

Thinkphp 模板中直接对数据处理 模板中使用函数 中文字符串截取

1.Thinkphp 模板中直接对数据处理:{$data.name|substr=0,3} 2.中文字符串截取函数:mb_substr=0,14,'utf-8' 3.中文字符串统计:iconv_strlen(字符串,"UTF-8") <div style="margin-bottom: 8px;"> <a href="#" target="_blank" class="my_a" >

scanf函数输入字符串详解

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串.下面写一个程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main(void) 4 { 5 char str[10];//str是string的缩写,即字符串 6 printf("请输入字符串:"); 7 scanf("%s",str);//输入参数是已经定义好的"字符数组名",不用加&,因

javascript 中 split 函数分割字符串成数组

分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); //字符分割 for (i=0;i<strs.length ;i++ ) { document.write(strs[i]+"<b

scanf 和 gets 读取字符串

深入了解scanf()/getchar()和gets()等函数 scanf与gets函数读取字符串的区别 今天看到一段话,大致是说gets比scanf()快,有点吃惊,搜了一下,scanf()和gets的区别大致有着几条: 1.scanf() 会忽略行开头的所有空格,并以空格.换行符结束输入: 使用getchar()读取scanf语句执行后,缓冲区留下的换行符, gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替: 2. 在数据大量的情况下,用gets读取快于s

C/C++ scanf函数中%s和%c的简单区别

首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf,getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取).另外特别注意键盘上敲入回车实际为"\r\n",但存储到缓冲区时候会舍弃'\r'而只存储\n.例如我们敲入字符"12345回车",缓冲区内存储的为"12345\n". 文章中"_"代表空格 代码: char *s; scanf("%s&qu

scanf函数之扫描集

前言 %[]是scanf函数不常用到的格式字符--扫描集(scanset),它的用法很简单,但却能巧妙地解决一些输入问题.(由于书籍里和网上对此格式字符的介绍很少且篇幅较小,本文可能会有些许错误,请读者勘误) 引入 介绍扫描集用法前,先明确下面三点: 1.扫描集用于赋值给字符型变量,包括字符串.字符数组.(不建议使用单个字符变量) 2.scanf函数以空白字符(空格符.制表符.回车符)结束对变量的赋值. 3.所有变量都已赋值的情况下,回车是对scanf函数的结束,即继续执行下面的命令. 以下给出