C语言输入输出函数大全(新手必看)
本文致力于让读者了解 C 语言数据输入与输出有关语句的概念,掌握如何对程序的输入输出进行操作。
C语言单字符输入输出函数
在 C 语言中,输出单个字符使用函数 putchar(),输入单个字符使用函数 getchar(),接下来我们分别介绍这两种函数如何使用。1) C语言putchar()函数
在 C 语言中,输出单个字符可以使用 putchar() 函数,使用 putchar() 函数时要添加头文件<stdio.h>
。putchar() 函数可输出字符数据,它的作用是向显示设备输出一个字符。其语法格式如下:
int putchar(int ch);其中的参数 ch 是要进行输出的字符,可以是字符型变量或整型变量,也可以是常量等。
例如:
putchar('C'); //输出字符C putchar('1'); //输出字符1
使用 putchar() 函数也可以输出转义字符,如输出字符 C 的代码如下:
putchar('\103'); //输出字符C putchar('\n'); //输出转义字符\n其中,'\103' 是转义字符,表示八进制数 103 对应的 ASCII 值表示的字符。
【实例】利用 putchar() 函数输出笑脸“^_^”。
#include<stdio.h> /*包含头文件*/ int main() /*主函数main()*/ { char cChar1, cChar2; /*声明变量*/ cChar1 = '^'; /*为变量赋值*/ cChar2 = '_'; putchar(cChar1); /*输出字符型变量^*/ putchar(cChar2); /*输出字符型变量_*/ putchar(cChar1); /*输出字符型变量^*/ putchar('\n'); /*输出转义字符*/ return 0; /*程序结束*/ }运行程序,结果为:
^_^
从 putchar() 函数的一般语法格式可以看出,在括号中一定要写一个参数,这个参数可以是字符型、整型的常量、变量或表达式。例如:
char c='A'; //定义字符型变量 putchar(c); //输出A putchar(66); //输出B(B的ASCII值为66) putchar('C'); //输出C putchar('C'+32); //输出c(大写字母C的ASCII值为67,所以结果为99,对应小写字母c) putchar('\n'); //换行 putchar(getchar()); //输出getchar()返回的字符
2) C语言getchar()函数
getchar() 函数是 C 语言的一个标准库函数,它的作用就是从输入设备(比如键盘、鼠标等)输入一个字符。getchar() 函数的语法格式如下:
int getchar();getchar() 函数没有参数,使用getchar()函数时也要添加头文件<stdio.h>,函数的值就是从输入设备得到的字符。
例如,从输入设备得到一个字符并赋给字符型变量 cChar,代码如下:
cChar=getchar();
getchar() 函数只能接收一个字符。getchar() 函数得到的字符可以赋给一个字符型变量或整型变量,也可以不赋给任何变量,还可以作为表达式的一部分,如:
putchar(getchar());getchar() 函数可以作为 putchar() 函数的参数,用来从输入设备得到字符,putchar() 函数会将字符输出。
【实例】输入和输出大小写字母。
#include<stdio.h> //头文件 int main() //主函数 { char c1, c2; //定义字符型变量 printf("请输入一个小写字母:\n"); //输出提示信息 c1 = getchar(); //输入字母并赋给变量c1 c2 = c1 - 32; //将小写字母的ASCII值减32,得到对应的大写字母的ASCII值 printf("转换以后的字母及ASCII值:%c,%d\n", c2, c2);//输出对应的大写字母和ASCII值 return 0; //程序结束 }运行程序,结果为:
请输入一个小写字母:
a
转换以后的字母及ASCII值:A,65
C语言字符串输入输出函数
前面介绍了单字符输入输出函数,那么,对多个字符(字符串)进行输入和输出要使用什么函数呢?下面我们就来详细介绍对多字符进行操作的 puts() 和 gets() 函数。1) C语言puts()函数
字符串输出就是将字符串输出在控制台上,例如输出一句名言、一串数字等。在 C语言中,字符串输出使用的是 puts() 函数,它的作用是输出一个字符串。其语法格式如下:
int puts(char *str);使用 puts() 函数时,先要在程序中添加 <stdio.h> 头文件。其中,形式参数 str 是字符指针类型,可以用来接收要输出的字符串。
例如使用 puts() 函数输出一个字符串,代码如下:
puts("Welcome to c.biancheng.net!"); /*输出一个字符串常量*/ puts("放弃不难,但坚持一定很酷"); /*输出励志语句*/ puts("633520"); /*输出数字字符串*/ puts("永无bug"); /*输出中英文结合字符串*/与 printf() 函数有所不同,使用 printf() 函数进行换行时,要在其中添加转义字符“\n”。puts() 函数会在字符串中判断“\0”结束标志,遇到结束标志时,后面的字符不再输出并且会自动换行。
下面这行语句是输出一个字符串,之后会自动进行换行操作:
puts("Welcome\0 to MingRi!"); /*输出一个字符串常量*/对于上面加上了“\0”的语句,puts() 函数输出的字符串就变成了“Welcome”。
【实例】使用 puts() 函数输出地铁购票信息。
#include<stdio.h> /*包含头文件*/ int main() /*主函数main()*/ { puts(" 购票信息"); /*输出信息*/ puts("目的车站:人民广场"); puts("票 价:2.00"); puts("购票数量:5"); puts("应付金额:10.00"); puts("已付金额:10.00"); puts("找 零:0"); return 0; /*程序结束*/ }运行程序,结果为:
购票信息
目的车站:人民广场
票 价:2.00
购票数量:5
应付金额:10.00
已付金额:10.00
找 零:0
2) C语言gets()函数
在 C语言中,字符串输入使用的是 gets() 函数。gets() 函数的语法格式如下:
char *gets(char *str);在使用 gets() 函数输入字符串前,要为程序加入头文件
<stdio.h>
。其中的 str 字符指针变量为形式参数。gets() 函数会将读取的字符串保存在形式参数 str 中,读取过程会直到出现新的一行为止,新的一行的换行字符将会转换为字符串中的“\0”。
例如定义字符数组变量 cString,然后使用 gets() 函数获取输入字符的代码如下:
gets(cString);在上面的代码中,cString 变量获取到了字符串,并将最后的换行符转换成了结束字符。
【实例】编写一个在线考试系统,首先输出题目和选项,由用户输入自己的选项,最后输出用户的选择。
#include <stdio.h> /*包含头文件*/ int main() /*主函数main()*/ { char cString[2]; /*定义一个字符数组变量*/ puts("请问以下哪一个不是开发语言:"); /*puts()函数输出题目信息*/ puts("A.C B.C++ C.C# D.CF"); gets(cString); /*获取字符串,选择答案*/ puts("你输入的答案是:"); /*puts()函数输出提示信息*/ puts(cString); /*输出所选答案*/ return 0; /*程序结束*/ }运行程序,结果为:
请问以下哪一个不是开发语言:
A.C B.C++ C.C# D.CF
D
你输入的答案是:
D
C语言格式化输入输出函数
在 C语言程序中,有时候要求输出十进制数、十六进制数、八进制数或者小数,这时就需要使用格式化函数了,下面就来介绍格式化输入输出函数 printf() 函数和 scanf() 函数。1) C语言printf()函数
printf() 函数不仅能输出字符串,还能输出整型、浮点型数据等各种类型的数据。printf()的一般形式
在 C语言中,printf() 函数的作用是向终端(输出设备)输出若干任意类型的数据,其语法格式如下:printf(格式控制,输出列表);1) 格式控制:格式控制是用双引号标识的字符串,也称为转换控制字符串。其中包括格式字符和普通字符两种字符:
- 格式字符用来进行格式说明,作用是将输出的数据转换为指定的格式并输出。格式字符是以“%”字符开头的。
- 普通字符是需要原样输出的字符,其中包括双引号内的逗号、空格和换行符。
2) 输出列表:输出列表中列出的是要输出的一些数据,可以是变量或表达式。
例如,输出一个整型变量的语句如下:
int iInt=521; printf("%d I Love You",iInt);执行上面的语句输出的字符是“521 I Love You”。在格式控制双引号中的字符是“%d I Love You”,其中的“I Love You”字符串是普通字符,而“%d”是格式字符,表示输出的是后面 iInt 的数据。
由于 printf() 是函数,格式控制和输出列表处都是函数的参数,因此 printf() 函数的一般形式也可以表示为:
printf(参数1,参数2,……,参数n)
printf()的格式字符
函数中的每一个参数会按照给定的格式和顺序依次输出。例如,输出一个字符型变量和整型变量的语句如下:printf("the Int is %d,the Char is %c",iInt,cChar);下表列出了有关 printf() 函数的格式字符。
格式字符 | 功能说明 |
---|---|
d、i | 以带符号的十进制形式输出整数(整数不输出+符号) |
o | 以八进制无符号形式输出整数 |
x、X | 以十六进制无符号形式输出整数。用x输出十六进制数的a~f时,以小写形式输出;用X时,则以大写形式输出 |
u | 以无符号十进制形式输出整数 |
c | 以字符形式输出,只输出一个字符 |
s | 输出字符串 |
f | 以小数形式输出 |
e、E | 以指数形式输出实数,用e时指数以“e”表示,用E时指数以“E”表示 |
g、G | 选用“%f”或“%e”格式中输出宽度较短的一种格式,不输出无意义的0。若以指数形式输出,则指数以“E”表示 |
1) d、i 格式字符:以带符号的十进制形式输出整数(正数不输出+符号)。例如:
int a=-1; //整型变量 printf("%d", a); //用格式字符d输出,结果为-1 printf("%i", a); //用格式字符i输出,结果为-1
2) o 格式字符:以八进制无符号形式输出整数。例如:
int a=1314; //整型变量 printf("%o", a); //用格式字符o输出,结果为八进制数02442
3) x、X 格式字符:以十六进制无符号形式输出整数。用 x 输出十六进制数的 a~f 时,以小写形式输出;用 X 时,则以大写形式输出。例如:
int a=1522; //整型变量 printf("%x", a); //用格式字符x输出,结果为十六进制数0x5f2 printf("%X", a); //用格式字符X输出,结果为十六进制数0x5F2
4) u 格式字符:以无符号十进制形式输出整数。例如:
int a=1; //整型变量 printf("%u", a); //用格式字符u输出,结果为1
5) c 格式字符:以字符形式输出,只输出一个字符。例如:
char a='g'; //字符型变量 printf("%c", a); //用格式字符c输出,结果为g
6) s 格式字符:输出字符串。例如:
char *a="I love China"; //利用指针定义字符串变量 printf("%s", a); //用格式字符s输出,结果为I love China
7) f 格式字符:以小数形式输出,默认输出 6 位小数。例如:
float a=3.14f; //浮点型变量 printf("%f", a); //用格式字符f输出,结果为3.140000
8) e、E 格式字符:以指数形式输出实数,用 e 时指数以“e”表示,用 E 时指数以“E”表示。例如:
float a=13.14f; //浮点型变量 printf("%e", a); //用格式字符e输出,结果为1.314000e+01 printf("%E", a); //用格式字符E输出,结果为1.314000E+01
9) G、g 格式字符:选用“%f”或“%e”格式中输出宽度较短的一种格式,不输出无意义的 0。若以指数形式输出,则指数以“E”表示。例如:
float a=13.14f; //浮点型变量 printf("%G", a); //用格式字符G输出,结果为13.14 printf("%g", a); //用格式字符g输出,结果为13.14
【实例】使用格式输出函数printf()输出不同类型的变量。
#include<stdio.h> int main() { int iInt = 10; /*定义整型变量*/ char cChar = 'A'; /*定义字符型变量*/ float fFloat = 12.34f; /*定义单精度浮点型变量*/ printf("the int is: %d\n", iInt); /*使用printf()函数输出整型数据*/ printf("the char is: %c\n", cChar); /*输出字符型数据*/ printf("the float is: %f\n", fFloat); /*输出浮点型数据*/ printf("the string is: %s\n", "I LOVE YOU"); /*输出字符串*/ return 0; }运行结果为:
the int is: 10
the char is: A
the float is: 12.340000
the string is: I LOVE YOU
printf()的附加格式字符
在格式说明中,“%”符号和格式字符间可以插入几种附加符号,如下表所示:附加格式字符 | 功能说明 |
---|---|
l | 用于长整型整数,可加在格式字符d、o、x、u、f前面 |
m(代表一个整数) | 数据最小宽度 |
n(代表一个整数) | 对于实数,表示输出n位小数;对于字符串,表示截取的字符个数 |
- | 输出的数字或字符在域内向左靠拢 |
在使用 printf() 函数时,除 X、E、G 外其他格式字符必须用小写字母,如“%d”不能写成“%D”。如果想输出“%”符号,则在格式控制处使用“%%”进行输出即可。
下面分别对这 4 个附加格式字符进行举例说明。
1) l(字母 L)附加格式字符:用于长整型数据,可加在格式字符d、o、x、u、f前面。例如:
long a=123478987L; //定义长整型变量并赋值 double b = 0.013697; //定义双精度类型变量并赋值 printf("%ld %lf", a,b); //用附加格式字符l修饰d、f,输出结果输出结果如下:
123478987 0.013697
2) m(代表一个整数)附加格式字符:数据最小宽度。例如:
int a = 123; //定义整数 printf("这个数是:%4d", a); //此时m=4,修饰格式字符d printf("这个数是:%2d", a); //此时m=2,修饰格式字符d输出结果如下:
这个数是: 123
这个数是:123
3) n(代表一个整数)附加格式字符:对于实数,表示输出 n 位小数;对于字符串,表示截取的字符个数。例如:
float a = 13.1456f; //定义单精度类型变量并赋值 printf("%.2f", a); //用.2修饰f,其中n=2输出结果:
13.15
再如:
float a = 13.1456f; //定义单精度类型变量并赋值 printf("%10.2f", a); //用10.2修饰f,其中m=10、n=2输出结果(前面有 5 个空格)如下:
13.15
再如:
printf("%10.2s","instr"); //用10.2修饰s,其中m=10、n=2输出结果(前面有 8 个空格)如下:
in
4) -附加格式字符。:输出的数字或字符在域内向左靠拢。例如:
printf("%-10.2s","instr"); //用10.2修饰s,其中m=10、n=2输出结果(向左靠拢,前面没有空格)如下:
in
【实例】通过例子来看一下附加格式字符的意义。
#include<stdio.h> int main() { long iLong = 100000; /*定义长整型变量,为其赋值*/ printf("the Long is %ld\n", iLong); /*输出长整型变量*/ printf("the string is: %sKeJi\n", "MingRi"); /*输出字符串*/ printf("the string is: %10sKeJi\n", "MingRi"); /*使用10控制输出列*/ printf("the string is: %-10sKeJi\n", "MingRi"); /*使用-表示向左靠拢*/ printf("the string is: %10.2sKeJi\n", "MingRi"); /*使用2表示截取的字符数*/ printf("the string is: %-10.2sKeJi\n", "MingRi"); return 0; }运行结果为:
the Long is 100000
the string is: MingRiKeJi
the string is: MingRiKeJi
the string is: MingRi KeJi
the string is: MiKeJi
the string is: Mi KeJi
如何输出“%d”、“\”和双引号?
printf() 函数中格式字符有“%d”,转义字符前面有“\”,另外还有双引号,那么怎么将这 3 种符号输出呢?接下来用一个程序来说明,代码如下:
#include<stdio.h> int main() { printf("%%d\n"); //输出“%d” printf("\\\n"); //输出“\” printf("\"\"\n"); //输出双引号 }运行结果如下:
%d
\
""
2) C语言scanf()函数
在 C语言中,scanf() 函数的功能是指定固定的格式,并且按照指定的格式接收用户通过键盘输入的数据,最后将数据存储在指定的变量中。C语言scanf()的一般形式
scanf() 函数是用来按照指定格式从输入设备输入数据的,它的一般形式如下:scanf(格式控制,地址列表);下面介绍 scanf() 函数里的参数。
1) 格式控制:用来指定每个输入项的输入格式,格式控制通常由多个格式说明组成,都由“%”开头,后面跟格式字符,例如 %d、%c 等。
2) 地址列表:是需要读入变量的地址或者字符串的首地址,而不是读入变量本身。用“&”符号表示取变量的地址,不用关心变量的地址具体是多少,只要在变量的标识符前加“&”,就表示取变量的地址。格式说明的个数和地址列表中的数据个数要相对应。
编写程序时,在 scanf() 函数参数的地址列表处一定要使用变量的地址,而不是使用变量的标识符,否则编译器会提示出现错误。
例如:
int a; //定义整型变量 scanf("%d",&a); //输入a的值
再如:
int a,b; //定义整型变量 scanf("%d,%d",&a,&b); //输入a、b的值上面这段代码中,两个 %d 之间有一个逗号,在运行程序时,输入 a、b 的值,它们中间也需要用逗号,再按
<Enter>
键完成输入。输入示例如下:
13,14
再如:
int a,b; //定义整型变量 scanf("a=%d,b=%d",&a,&b); //输入a、b的值输入示例如下:
a=13,b=14
也就是说,格式控制之间用什么符号,在输入设备上就输入对应的符号。C语言scanf()的格式字符
格式字符用在 scanf() 函数的格式控制中,一般形式如下:%格式字符有以下几点说明:
- % 是固定的,不可改变,用到格式字符时 % 不可省略;
- 不同的数据类型要用不同的格式字符来控制数据的输入,如整型数据需要使用 %d 格式输入。
scanf() 函数常用的格式字符如下表所示:
格式字符 | 功能说明 |
---|---|
d、i | 用来输入有符号的十进制整数 |
u | 用来输入无符号的十进制整数 |
o | 用来输入无符号的八进制整数 |
x、X | 用来输入无符号的十六进制整数(大小写形式的作用是相同的) |
c | 用来输入单个字符 |
s | 用来输入字符串 |
f | 用来输入浮点数,可以用小数形式或指数形式输入 |
e、E、g、G | 与f作用相同,e与f、g可以相互替换(大小写形式的作用是相同的) |
格式字符 %s 用来输入字符串。将字符串输入一个字符数组,在输入时以非空白字符开始,以第一个空白字符结束。字符串以 \0 作为最后一个字符。
下面分别对格式字符进行举例说明。
1) d、i 格式字符:用来输入有符号的十进制整数。例如:
int a; //整型变量 scanf("%d", &a); //用格式字符d输入 scanf("%i", &a); //用格式字符i输入
2) u 格式字符:用来输入无符号的十进制整数。例如:
int a=1; //整型变量 scanf("%u", &a); //用格式字符u输入
3) o 格式字符:用来输入无符号的八进制整数。例如:
int a; //整型变量 scanf("%o", &a); //用格式字符o输入
4) x、X 格式字符:用来输入无符号的十六进制整数(大小写形式的作用是相同的)。例如:
int a ; //整型变量 scanf("%x",& a); //用格式字符x输入 scanf("%X", &a); //用格式字符X输入
5) c 格式字符:用来输入单个字符。例如:
char a; //字符型变量 scanf("%c", &a); //用格式字符c输入
6) s 格式字符:用来输入字符串。例如:
char *a; //利用指针定义字符串变量 scanf("%s", &a); //用格式字符s输入
7) f 格式字符:用来输入浮点数,可以用小数形式或指数形式输入。例如:
float a; //浮点型变量 scanf("%f", &a); //用格式字符f输入
8) e、E、g、G 格式字符:与f作用相同,e与f、g可以相互替换(大小写形式的作用是相同的)。例如:
float a; //浮点型变量 scanf("%e", &a); //用格式字符e输入 scanf("%E", &a); //用格式字符E输入 scanf ("%g", &a); //用格式字符g输入 scanf ("%G",& a); //用格式字符G输入
【实例】使用 scanf() 函数输入半径,计算对应圆的周长和对应球的体积。
#include<stdio.h> int main() { float Pie = 3.14f; /*定义圆周率*/ float fArea; /*定义变量*/ float fRadius; puts("Enter the radius:"); scanf("%f", &fRadius); /*输入半径*/ fArea = 2 * fRadius * Pie; /*计算圆周长*/ printf("The perimeter is: %.2f\n", fArea); /*输出计算的结果*/ fArea = 4 / 3 * (fRadius * fRadius * fRadius * Pie);/*计算球体积*/ printf("The volume is: %.2f\n", fArea); /*输出计算的结果*/ return 0; /*程序结束*/ }运行程序,结果为:
Enter the radius:
2.5
The perimeter is: 15.70
The volume is: 49.06
1) 为了能接收用户输入的数据,程序代码中定义了一个变量 fRadius。因为 scanf() 函数只能接收用户的数据,而不能输出信息,所以先使用 puts() 函数输出一段字符表示信息提示。
2) 调用 scanf() 函数,从函数参数中可以看到,在格式控制的位置使用双引号对格式字符进行标识,“%f”表示输入的是浮点型数据。在参数中的地址列表位置使用“&”符号表示变量的地址。此时变量 fRadius 已经得到了用户输入的数据。
3) 利用表达式计算圆的周长和球的体积,调用 printf() 函数对变量进行输出。
scanf()的附加格式字符
在格式说明中,“%”符号和格式字符间可以插入几种附加符号(即附加格式字符),一般形式如下:% 附加格式字符 格式字符有以下几点说明。
- % 依然不可省略;
- 格式字符可取表 1 中的任意一种。
scanf() 函数的附加格式字符如下表所示。
格式字符 | 功能说明 |
---|---|
l | 用于长整型数据,可加在格式字符 d、o、x、u、f 前面 |
h | 用于短整型整数,可加在格式字符 d、o、x、u、f 前面 |
1) l 附加格式字符。:用于长整型数据,可加在格式字符 d、o、x、u、f 前面。例如:
long a; //定义长整型变量 double b; //定义双精度浮点型变量 scanf("%ld %lf", &a,&b); //用附加格式字符l修饰d、f,并输入
2) h 附加格式字符:用于短整型整数,可加在格式字符 d、o、x、u、f 前面。例如:
short a; //定义短整型变量 scanf("%hd", &a); //用附加格式字符h修饰d,并输入
scanf()的数值和字符混合输入
有时候程序不单会让用户输入一个数据,还可能会让用户输入多个数据,且类型不同,我们通过一个例子来说明。【实例】输入字母和对应的 ASCII 值。
#define _CRT_SECURE_NO_WARNINGS /*解除vs安全性检测问题*/ #include<stdio.h> int main() { int num; //定义整型变量 char c; //定义字符型变量 printf("请输入字母和对应的ACSII值:\n"); //输出提示信息 scanf("%c %d",&c,&num); //输入字母和数值 printf("输入的字母是%c,它对应的ASCII值是:%d\n",c,num); //输出信息 return 0; //程序结束 }运行结果为:
请输入字母和对应的ACSII值:
c 99
输入的字母是c,它对应的ASCII值是:99