首页 > 其他分享 >【第四章·键盘输入和屏幕输出】第一节:单个字符的输入/输出

【第四章·键盘输入和屏幕输出】第一节:单个字符的输入/输出

时间:2024-10-22 20:47:35浏览次数:3  
标签:输出 ch putchar 字符 第一节 键盘输入 ASCII getchar

目录

4.1.1 字符常量

转义字符

ASCII 码

Unicode 字符集

4.1.2 字符的输入输出

getchar() 和 putchar()

案例演示:字母大小写转换


章节内容导读:

        键盘输入和屏幕输出是编写简单的顺序结构程序时最常用到的操作。C 程序中的键盘输入和屏幕输出都是通过调用输入 / 输出函数实现的。本章介绍常用的输入 / 输出函数,建议这部分内容当作手册内容即用即学,或者自学 “C 语言程序设计精髓” MOOC 课程中的第 3 周视频,主要内容如下:

  • 字符常量与转义字符
  • 字符输入函数 getchar() 与字符输出函数 putchar()
  • 数据的格式化输出函数 printf() 与数据的格式化输入函数 scanf()

4.1.1 字符常量

转义字符

        C 语言中的字符常量是用单引号括起来的一个字符。例如,'a' 是字符常量,而 a 则是一个标识符。再如,'3' 表示一个字符常量,而 3 则表示一个整数。

        把字符放在一对单引号里的做法,适用于多数可打印字符,但不适用于某些控制字符(如回车符、换行符等)。C 语言中用转义字符(Escape Character)即以反斜线(\)开头的字符序列来描述特定的控制字符。常用的转义字符如表 4-1 所示。

  • 例如,前几章的程序实例中涉及的字符 '\n',就是一种转义字符,它用于控制输出时的换行处理,即将光标移到下一行的起始位置。
  • 与 '\n' 不同的是,'\r' 则表示回车,但不换行,即将光标移到当前行的起始位置。
  • 再如,'\0' 代表 ASCII 码值为 0 的字符,它代表一个字符,而不是两个字符。
  • 而 '\t' 为水平制表符,相当于按下 Tab 键。屏幕上的一行通常被划分成若干个域,相邻域之间的交界点称为 “制表位”,每个域的宽度就是一个 Tab 宽度,有些开发环境对 Tab 宽度的默认设置为 4,而有些则为 8,多数人习惯上将其设置为 4。
  • 注意,每次按下 Tab 键,并不是从当前光标位置向后移动一个 Tab 宽度,而是移到下一个制表位,实际移动的宽度视当前光标位置距相邻的下一个制表位的距离而定。

        另外值得注意的是:当转义序列出现在字符串中时,是按单个字符计数的。例如,字符串 "abc\n" 的长度是 4,而非 5。因为字符 '\n' 代表 1 个字符。

ASCII 码

        由于字符型(char)变量仅占 1 个字节的内存空间,因此它只能存放 1 个字符。

        字符型变量的取值范围取决于计算机系统所使用的字符集。目前计算机上广泛使用的字符集是 ASCII 码(美国标准信息交换码)字符集(详见附录 D)。该字符集规定了每个字符所对应的编码,即在字符序列中的 “序号”。也就是说,每个字符都有一个等价的整型值与其相对应,这个整型值就是该字符的 ASCII 码。从这个意义上而言,可将 char 型看成是一种特殊的 int 型

        一个整型数在内存中是以二进制形式存储的,而一个字符在内存中也是以其对应的 ASCII 码的二进制形式存储的。例如,字符 'A' 在内存中存储的是其 ASCII 码 65 的二进制值,存储形式与整型数 65 类似,只是在内存中所占的字节数不同而已。char 型数据占 1 个字节,而 int 型数据在 16 位系统中占 2 个字节,在 32 位系统中占 4 个字节。

        在 ASCII 码取值范围内,对 char 型数据和 int 型数据进行相互转换不会丢失信息,二者可以进行混合运算。同时,一个 char 型数据既能以字符型格式输出(%c),也能以整型格式输出(%d),以整型格式输出时就是直接输出其 ASCII 码的十进制值

Unicode 字符集

        由于不同国家和地区制定的编码标准互不兼容,无法将不同语言的文字存储在同一段编码的文本中,不便于国际的信息交流,不能跨语言、跨平台文本转换和处理,为了解决这个问题,国际标准化组织(ISO)制定了更强大的编码标准——Unicode 字符集,为各种语言中的每个字符设定统一且唯一的数字编号,所有字符统一用 2 个字节保存,也称为宽字节字符


4.1.2 字符的输入输出

getchar() 和 putchar()

        getchar() 和 putchar() 是 C 标准函数库中专门用于字符输入 / 输出的函数。

        函数putchar() 的作用是把一个字符输出到屏幕的当前光标位置。而函数 getchar() 的作用是从键盘读取字符

        当程序调用 getchar() 时,程序就等待用户按键,用户从键盘输入的字符会被首先放到输入缓冲区中,直到用户按下回车键为止(回车符也会被放到输入缓冲区中)。当用户键入回车后,getchar() 才开始从标准输入流中读取字符,并且每次调用只读取一个字符,其返回值是用户输入的字符的 ASCII 码

  • 若遇到文件结尾(End-Of-File),则返回 -1,且将用户输入的字符回显到屏幕上。
  • 如果用户在按回车之前输入了多个字符,那么其他字符会继续留在输入缓冲区中,等待后续 getchar() 函数调用来读取,即后续的 getchar() 调用直接从缓冲区中读取字符,直到缓冲区中的字符(包括回车)全部读完后,才会等待用户按键,只要缓冲区中有字符就不会等待用户的按键操作

案例演示:字母大小写转换

        【例 4.1】从键盘输入一个大写英文字母,将其转换为小写字母后,再显示到屏幕上。

        【问题求解方法分析】观察附录 D 中的常用 ASCII 字符表,可以发现这样一个规律,即小写英文字母的 ASCII 码值比相应的大写英文字母的 ASCII 码值大 32,即 'a' 与 'A','b' 与 'B','c' 与 'C'……的 ASCII 码值均相差 32。根据这一规律,可轻松实现大小写英文字母之间的转换。程序如下:

#include <stdio.h>

int main(void)
{
    char ch;
    printf("Press a key and then press Enter: ");
    ch = getchar(); // 从键盘输入一个字符,按回车键结束输入,该字符被存入变量 ch
    ch = ch + 32;   // 将大写英文字母转换为小写英文字母
    putchar(ch);    // 在屏幕上显示变量 ch 中的字符
    putchar('\n');  // 输出一个回车换行控制符

    return 0;
}

        程序的运行结果如下:

        程序第 7 行语句首先调用函数 getchar() 从键盘输入一个字符,然后将读入的字符即函数 getchar() 的返回值赋值给字符型变量 ch。注意,函数 getchar() 没有参数,函数的返回值就是从终端键盘读入的字符。因此,不要把该语句写成如下形式:

getchar(ch); /* 错误的使用方法 */

        第 8 行语句将变量 ch 中的大写英文字母的 ASCII 码值加上 32,即可得到相应的小写英文字母的 ASCII 码值,从而实现大写英文字母到小写英文字母的转换。由于字符 'a' 与字符 'A' 相减,相当于字符 'a' 与字符 'A' 的 ASCII 码值相减,也相当于字符 'b' 与字符 'B' 的 ASCII 码值相减……而二者相减的差值就是 32,因此第 8 行语句与下面的语句是等价的:

ch = ch + ('a' - 'A');

        第 9 行语句调用函数 putchar() 向终端显示器屏幕的当前光标位置输出 ch 中的字符,函数 putchar() 的参数就是待输出的字符,这个字符既可以是可打印字符,也可以是转义字符。例如,第 10 行调用函数 putchar() 输出的就是转义字符 \n,作用是将光标换到下一行的起始位置。

标签:输出,ch,putchar,字符,第一节,键盘输入,ASCII,getchar
From: https://blog.csdn.net/qq_53139964/article/details/143109803

相关文章

  • Webpack5-修改输出资源的名称和路径
    修改输出资源的名称和路径1.配置constpath=require("path");module.exports={entry:"./src/main.js",output:{path:path.resolve(__dirname,"dist"),filename:"static/js/main.js",//将js文件输出到static/js目录中......
  • C语言使用指针作为函数参数,并利用函数嵌套求输入三个整数,将它们按大到小的顺序输出。(
    输入三个整数,要求从大到小的顺序向他们输出,用函数实现。   本代码使用到了指针和函数嵌套。   调用指针做函数ex,并嵌套调用指针函数exx在函数ex中。(代码在下面哦!)一、关于函数 ex  1. 这个函数接受三个指针参数 int*p1 、 int*p2 和 int*p3 ,分别指......
  • 德敏哲Germanjet磁致伸缩位移传感器SSI输出选购及PLC设置指引
    1.甚么是 SSI?SSI全称 “Synchronous SerialInterface”(同步串行接口)。它是一个数字通讯接口,一个 SSI主站(例如:PLC) 能连接一个 SSI从站接口(例如:位移传感器)。有些 PLC或模块 能同时提供多个 SSI主站,但每个主站也只能连接一个 SSI从站。2.主站和从站分......
  • 外贸商城源码,进出口跨境电商平台电脑端+移动端网站+客服系统 网站设计及源码输出
    外贸电商平台一直是外贸企业的心头好,快速测品,快速试错,但需要做强做大还是需要有企业自身的电商独立站。进出口跨境电商平台能快速整合企业上下游及行业资源而受到外贸行业企业的青睐。今天,我们一起聊聊进出口跨境电商平台的设计和源码思路分享。一、可确认的多语言翻译机制......
  • Manim教程:第二章 输出界面的基本设置
    2.1页面的外观设计        在Manim中,图形的视觉表现和动画的美观性往往与背景颜色密切相关。用户可以轻松改变场景的背景颜色,这为动画赋予了更多的视觉特性和情感色彩。背景颜色的设置通常是动画创作的重要第一步,因为它可以影响观众的情绪和对内容的接受。比如,一个......
  • 【OpenAI】第一节(OpenAI API)获取OpenAI API KEY的两种方式,开发者必看全方面教程!
    在当今人工智能迅猛发展的时代,OpenAI的大模型为开发者提供了强大的文本生成能力。无论你是想创建聊天机器人、内容生成工具,还是其他创新应用,掌握如何获取和使用OpenAIAPIKey是你迈向成功的第一步!本文将详细介绍获取APIKey的步骤、充值方法以及如何在项目中调用API......
  • SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句
    原文链接:SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句–每天进步一点点上一篇文章中简单介绍了springboot通过系统配置的方式配置日志:SpringBoot使用默认的日志logback(1)—系统配置这篇文章简单介绍一下日志的自定义配置。1.自定义配置springboot......
  • javascript输出金字塔
    <script>//首先创造一个空的变量letstr=''letlevel=prompt("输入金字塔的层数")//获取输入的纯数字,其余情况都转化为NaNlevel=parseInt(level)&&Number(level)//判断用户的输入是否合法if(isNaN(level)){alert("金字塔的数......
  • QT项目打包成exe文件-非常详细(侧重于解决输出的exe文件没有原项目功能的问题)
    写在前面: 我是研二学生,用qt给老师项目做的一个辅助软件。项目要验收,所以需要打包qt项目成exe文件,但是我死活弄不出来,来回搞了两三天才弄好。特此写下第一篇博客,记录这个过程,并给同样困扰的新手朋友们提供一个方法。我是一个新手,期待大家的批评指正。打包流程: 1、获取初始......
  • 洛谷知识点——C++ 11 实现一次性输出多行文本
    完整语法是R"deli(...)deli"。(其中deli并不是固定的,那里其实是一个用户自定义的字符序列,最多16个基本字符,不可含反斜线,空格和小括号。)故P1000超级玛丽游戏解法为#include<iostream>usingnamespacestd;intmain(){cout<<R"(********......