首页 理论教育 C语言教程:scanf函数是否可用于键盘输入文本

C语言教程:scanf函数是否可用于键盘输入文本

时间:2023-11-20 理论教育 版权反馈
【摘要】:字符变量以ASCII码形式存储在内存中,长度为一个字节。图3-3 内存中的字符串变量字符串与字符变量的区别1)程序中的书写方式不同。图3-6 单步调试程序原来,scanf()根本就没有把键盘敲入的字符串完整地赋值给ch_s,仅把字符串“I,0”赋给了ch_s。

C语言教程:scanf函数是否可用于键盘输入文本

1.字符变量

下面语句声明了两个字符类型变量,分别是ch_a和ch_b。

978-7-111-49552-9-Chapter03-10.jpg

字符变量以ASCII码形式存储在内存中,长度为一个字节。ASCII码是美国国家标准局(ANSI)为计算机字符集制定的标准二进制代码(American Standard Code for Information Interchange,美国标准信息交换码),部分字符集的ASCII码见表3-2。

程序中用单引号' '括起一个字符(如'a')表示C语言的字符常量。

表3-2 部分字符的ASCII码

978-7-111-49552-9-Chapter03-11.jpg

(续)

978-7-111-49552-9-Chapter03-12.jpg

由表3-2可以查阅字符的ASCII码,如'A'的十进制ASCII码是65,'a'的十进制ASCII码是97。

如果对字符变量ch_a赋值'A',即执行如下语句:

978-7-111-49552-9-Chapter03-13.jpg

则在ch_a变量的单元内,存储着'A'的二进制代码“01000001”,如图3-2所示。

978-7-111-49552-9-Chapter03-14.jpg

图3-2 内存中的字符变量

其实,读者也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

2.字符串变量

很多初学者对字符串的概念总是非常困惑,这让笔者也感到困惑,初学者出错的原因大多是:

1)初学者总是不知道如何处理字符串的结尾符。

2)与字符变量不同,编程者不能简单地用“=”给字符串赋值。

(1)字符串的定义

连续地存储在内存中的字符元素序列,在C语言中称为“字符串”,例如:

978-7-111-49552-9-Chapter03-15.jpg

此处定义了一个字符串变量,最大能存储99个字符元素(字符串必须有一个结尾符)。

(2)结尾符

字符串连续地存储在内存的一个区域中,每个字符元素仍用其ASCII码表示,有一个结尾符表示序列的结束,即二进制00000000,也就是ASCII码的“空字符”,记为Null或\0。

假设给字符串变量ch_s赋值“ABCD”,则该字符序列在内存中如图3-3所示。注意,现在的ch_s在内存中占用的实际长度是5字节,而不是4字节!

978-7-111-49552-9-Chapter03-16.jpg

图3-3 内存中的字符串变量(www.xing528.com)

(3)字符串与字符变量的区别

1)程序中的书写方式不同。

字符常量是单引号括起来的一个字符,字符串常量是双引号括起来的字符序列(0~N个字符),如:

978-7-111-49552-9-Chapter03-17.jpg

所以,字符'a'和字符串"a"的区别如下。

字符'a':1字节(ASCII码值为97)

字符串"a":两字节(97,0)

2)字符变量没有结尾符!

3)两者的赋值操作不同。

978-7-111-49552-9-Chapter03-18.jpg

3.跟我学C例题3-2——用scanf()从键盘输入字符串

程序3.2 跟我学C例题3-2

978-7-111-49552-9-Chapter03-19.jpg

978-7-111-49552-9-Chapter03-20.jpg

运行程序,弹出窗口如图3-4所示。

978-7-111-49552-9-Chapter03-21.jpg

图3-4 程序运行结果1

现在换个提问,如图3-5所示,再次运行程序3.2,输入如下语句:

978-7-111-49552-9-Chapter03-22.jpg

运行程序,弹出窗口如图3-5所示。

978-7-111-49552-9-Chapter03-23.jpg

图3-5 程序运行结果2

有麻烦了,谁能告诉我,输入的字符串跑到哪里去了?

为了找到原因,现在单步运行程序3.2(单步调试程序的方法留待后面讨论),仍输入"Idon’t enjoy studying computing—it’s just a means to an end.",程序运行界面如图3-6所示。

978-7-111-49552-9-Chapter03-24.jpg

图3-6 单步调试程序

原来,scanf()根本就没有把键盘敲入的字符串完整地赋值给ch_s,仅把字符串“I,0”赋给了ch_s。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈