第四章 C语言中的基本输入输出(六)

第四章 C语言的基本输入输出

第一节 字符输出函数 putchar

putchar 函数是字符输出函数 ,其功能是在终端输出单个字符。其函数原型为:

c 复制代码
int putchar(int ch);

ch 表示返回要输出 的字符内容,

返回值的作用:如果输出成功返回一个字符的ASC码,失败则返回-1.

如代码:

c 复制代码
putchar('A'); /*输出大写字母A */
putchar(x); /*输出字符变量x的值*/
putchar('\n'); /*换行*/

第二节 字符输入函数getchar

getchar 函数的功能是接受用户从键盘上输入的一个字符。

其一般调用形式如下:

c 复制代码
getchar();

gettchar 会以返回值的形式返回接受到的字符,即该字符的ASC码。

一般形式如下:

c 复制代码
char c;  /*定义字符变量c*/
c=getchar();  /*将读取的字符赋值给字符变量c*/

第三节 C语言格式化输出函数printf

printf函数是我们在C语言中最常用的输出函数。

printf 函数又叫做格式输出函数 ,其功能是按照用户指定的格式,把指定的数据输出到屏幕上,printf函数格式为:

c 复制代码
printf("格式控制字符串",输出表项);

其中格式控制字符串有两种:

1.格式字符串

格式字符串是以 %d 大头的字符串,在 %d 后面跟不同的格式字符,它用来说明输出数据的类型、形式、长度、小数位等。

格式字符串的形式为:%[输出最小宽度][.精度][长度] 类型

例如:%d 格式符表示用十进制整形格式输出;%f 格式符表示用实型(浮点型)格式输出;%5.2f 格式,表示输出宽度为5(包括小数点),并包含两位小数。

2.非格式字符串

非格式字符串在输出的时候鸳鸯打印。

常见的输出格式如下表:

格式字符对照表

格式字符 说明
d, i 以十进制形式输出有符号整数(正数不输出符号)
O 以八进制形式输出无符号整数(不输出前缀 0
x 以十六进制形式输出无符号整数(不输出前缀 0x
U 以十进制形式输出无符号整数
f 以小数形式输出单、双精度类型实数
e 以指数形式输出单、双精度实数
g %f%e 中较短输出宽度的一种格式输出单、双精度实数
C 输出单个字符
S 输出字符串

关于printf的更多用法,可以自行上机试验。

例如:

c 复制代码
#include<stdio.h>
int main()
{
    int a=12;
    float b=3.1415;
    char c='A';
    printf("%d\n",a);
    printf("0%o\n",a);
    printf("0x%x\n",a);
    printf("%3.2f\n",b);
    printf("%c\n",c);
    getchar();
    return 0;
}

*修饰符在printf()中的用法:

假如您不想事先指定字段宽度,而是希望由程序来制定该值,那么您可以在字段宽度部分使用*代替数字来达到目的,但是您也必须使用一个参数来告诉函数宽度的值是多少。具体的说,如果转换说明符为%d,那么参数列表中应该包括一个的值和一个d的值,来控制宽度和变量的值。该技术也可以和浮点值一起使用来指定精度和字段宽度。

可以参考下面的例子:

c 复制代码
/*使用可变宽度输出字段*/
#include<stdio.h>
int main(void)
{
    unsigned width,precision;
    int number = 256;
    double weight = 25.5;
    printf("Please input number's width:\n");
    scanf("%d",&width);
    printf("The number is: %*d\n",width,number);
    printf("Then please input width and precision:\n");
    scanf("%d %d",&width,&precision);
    printf("Weight = %*.*f\n",width,precision,weight);
    return 0;
}

运行过程及结果如下:

c 复制代码
Please input number's width:
6
The number is:    256
Then please input width and precision:
8 3
Weight =   25.500

特殊的,如果想输出一个%,该怎么输出呢?答案则是,输出两个%。原因是当一个%出现时,后面没有可以识别的字符,则不会显示,因此若需要显示一个%,则需要连着写两个%

c 复制代码
#include <stdio.h>
int main()
{
    int a=2,b=5;
    printf("a=%%d,b=%%d\n",a,b);
    return 0;
}

关于printf()的返回值:

printf函数的返回值是返回所打印的字符的数目。如有输出错误,那么printf()会返回一个负数(printf()的一些老版本会有不同的值)。

自行上机子实操体验!!!

第四节 C语言格式化输入函数scanf

scanf 函数称为格式化输入函数,即按照字符串的格式,从键盘上把数据输入到指定的变量中,scanf 函数的调用一般形式如下:

c 复制代码
scanf("格式控制字符串",输入项地址列表);

其中,格式充值字符串 的作用与printf 函数相同,但不能显示非格式字符串,也就是说不能显示提示字符串。地址表项中的地址给出的个变变量的地址,地址是由地址运算符"&" 后跟变量名组成的。

scanf函数中格式字符串的构成与peintf函数基本相同,但使用时有几点不同。

(1)格式说明符中,可以指定数据的宽度,但不能指定数据的精度。例:

c 复制代码
float a;
scanf("%10f",&a);  //正确
scanf("%10.2f",&a);  //错误

(2)输入long类型数据时必须使用%ld,输入double数据必须使用%lf或%le。

(3)附加格式说明符"*"使对应的输入数据不赋给相应的变量。

scanf()函数所用的转换说明符与printf()所用的几乎完全相同。主要区别在于printf()把%f、%e、%E、%g、%G同时用于float类型和double类型,而scanf()只是把他们用于float类型,而用于double类型时要求使用l(字母l)修饰符。

转换说明符对照表

格式符 功能描述
%c 将输入解析为单个字符
%d 将输入解析为有符号十进制整数
%e/%f/%g/%a 将输入解析为浮点数(%a为C99标准)
%E/%F/%G/%A 将输入解析为浮点数(%A为C99标准)
%i 将输入解析为有符号十进制整数
%o 将输入解析为有符号八进制整数
%p 将输入解析为指针(内存地址)
%s 将输入解析为字符串:从第一个非空白字符开始,直到遇到下一个空白字符为止
%u 将输入解析为无符号十进制整数
%x/%X 将输入解析为有符号十六进制整数

*修饰符在scanf中()的用法:

*在scanf()中提供截然不同的服务,当把它放在%和说明符字母之间时,它使函数跳过相应的输入项目。请参考程序事例:

c 复制代码
/*用*跳过scanf接收的数字*/
#include<stdio.h>
int main(void)
{
    int num;
    printf("Please enter three number:\n");
    scanf("%*d %*d %d",&num);
    printf("The last number is %d\n",num);
    return 0;
}

运行结果如下:

c 复制代码
Please enter three number:
2014 2015 2016
The last number is 2016

scanf()的返回值:

scanf()函数返回成功读入的项目的个数。如果它没有读取任何项目(比如它期望接收一个数字而您却输入的一个非数字字符时就会发生这种情况),scanf()返回0。

当它检测到"文件末尾"(end of file)时,它返回EOF(EOF在是文件stdio.h中的定义好的一个特殊值,一般,#define指令将EOF的值定义为-1)。

相关推荐
chengpei1475 小时前
I²C协议简介
c语言·开发语言
say_fall7 小时前
C语言编程实战:每日一题:随机链表的复制
c语言·开发语言·链表
唐·柯里昂7987 小时前
野火鲁班猫5使用正点原子 RTL8188EUS Wifi模块驱动移植(Linux5.10 Debian系统) 解决zsh报错
linux·c语言·mcu·物联网·ubuntu·硬件工程·软件构建
魂梦翩跹如雨8 小时前
P8615 [蓝桥杯 2014 国 C] 拼接平方数——Java解答
java·c语言·蓝桥杯
[J] 一坚9 小时前
华为OD、微软、Google、神州数码、腾讯、中兴、网易有道C/C++字符串、数组、链表、树等笔试真题精粹
c语言·数据结构·c++·算法·链表
不会编程的小寒9 小时前
C and C++
java·c语言·c++
不想写笔记10 小时前
C语言 操作符(下)
c语言·笔记
誰能久伴不乏10 小时前
为什么 TCP 服务端重启会出现 “Address already in use”问题解析
linux·服务器·c语言·网络·c++·tcp/ip
VekiSon10 小时前
gdb工具介绍
linux·c语言