C语言输入输出语句

C语言输入输出语句

0720

C语言程序中,既可以接收用户从键盘输入的数据,也可以将运行结果输出到屏幕上。

C 语言标准库提供了很多种完成输入和输出操作的语句,包括 getchar()、get()、scanf()、putchar()、puts() 和 printf()。

使用这些输入输出语句时,要在程序的开头引入<stdio.h>

#include <stdio.h>

输出语句

1) putchar()

putchar() 专门用来输出指定的一个字符。

举个例子:

#include <stdio.h>
int main() {
    putchar('A'); //输出字符 'A'
    return 0;
}

运行结果为:

A
putchar() 还可以输出某个字符型变量的值,例如:

#include <stdio.h>
int main() {
    char c = 'A';
    putchar(c); //输出c的值
    return 0;
}

运行结果和上面程序相同。

2) puts()

puts() 专门用来输出一个字符串。所谓字符串,就是用双引号" "括起来的多个字符(≥0),比如 “ABC”、”http://www.weixueyuan.net/” 等。

例如:

#include <stdio.h>
int main() {
    puts("http://www.weixueyuan.net");
    return 0;
}

运行结果为:

http://www.weixueyuan.net注意," "双引号只是 C 语言表示字符串的方式,输出的字符串不会带双引号。

3) printf()

printf() 不仅可以输出字符和字符串,还可以输出整数、小数等各种类型的数据。

printf() 可以直接输出一个字符串,例如:

#include <stdio.h>
int main() {
    printf("http://www.weixueyuan.net");
    return 0;
}

printf() 还有更高级的用法,需要套用如下的格式:

printf(格式控制字符串 , 数据1 , … , 数据n);数据1~数据n 表示要输出的 n 个数据,可以是整数、小数、字符、字符串等,也可以是变量或者表达式。

格式控制字符串本质是" "双引号包裹的字符串,双引号内可以包含两种信息:

  1. 普通字符:printf() 会原样输出这些字符。
  2. 格式控制符:又称占位符,作用是将数据1~数据n 按照指定的格式输出。

C 语言提供的格式控制符有很多,如下表所示:

格式控制符说 明
%c输出一个字符。
%hd、%d、%ld以十进制、有符号的形式分别输出 short、int、long 类型的整数。
%hu、%u、%lu以十进制、无符号的形式分别输出 short、int、long 类型的整数。
%ho、%o、%lo以八进制、不带前缀、无符号的形式分别输出 short、int、long 类型的整数。
%#ho、%#o、%#lo以八进制、带前缀、无符号的形式分别输出 short、int、long 类型的整数。
%hx、%x、%lx
%hX、%X、%lX
以十六进制、不带前缀、无符号的形式分别输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx
%#hX、%#X、%#lX
以十六进制、带前缀、无符号的形式分别输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf以十进制的形式分别输出 float、double 类型的小数。
%e、%le
%E、%lE
以指数的形式分别输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg
%G、%lG
以十进制和指数中较短的形式分别输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%s输出一个字符串。

有些格式控制符,还可以在 % 的后边插入以下修饰符:

修饰符说 明
适用所有控制符,输出的数字或字符向左对齐。
m(代表一个正整数)适用所有控制符,指定数据最小输出宽度,也就是至少占用几个字符的位置。
.n(n 代表一个正整数)可用于浮点型的格式控制符,表示保留 n 位小数。

也可以用于 %s,表示输出字符串中前 n 个字符。

举个简单的例子:

#include <stdio.h>
int main() {
    int n = 1, m = 2, t = 3;
    printf("n=%5d,m=%d\n",n,m); //输出的 n 占用 5 个字符的长度
    printf("n=%-5d,m=%d,t=%d\n", n,m,t); //输出的 n 占用 5 个字符的长度,且左对齐

    float f = 1.23456;
    printf("f=%f\n", f); //正常输出一个小数
    printf("f=%.2f\n", f); //输出一个小数,小数位数保留 2 位
    return 0;
}

运行结果为:

n=    1,m=2
n=1    ,m=2,t=3
f=1.234560
f=1.23

使用 printf() 时,需要注意以下几点:

  • 输出数据时,一定要使用相匹配的格式控制符,否则程序运行会错误;
  • printf() 的格式控制字符串中可以包含转义字符,比如 ‘\n’ 换行符、’\t’ 水平制表符等;
  • 如果想使用 printf() 输出字符%,应该在格式控制字符串中连续用两个%表示。

输入语句

1) getchar()

getchar 是“get character”(获取字符)的缩写,可以接收用户输入的一个字符。

例如:

#include <stdio.h>
int main() {
    char c = getchar();
    putchar(c);
    return 0;
}

程序运行后,任意输入一个字符,getchar() 会读取这个字符并赋值给字符变量 c。运行结果是:

A↙
A

表示按下 Enter 回车键。

getchar() 读取到的字符可以赋值给一个字符变量,也可以不赋给任何变量,例如:

#include <stdio.h>
int main() {
    putchar(getchar());
    return 0;
}

程序中,getchar() 读取用户输入的字符后,putchar()语句直接将接收到的字符输出,程序的运行结果和上面程序完全相同。

2) gets()

gets() 可以一次性接收用户输入的多个(≥1)字符。

举个例子:

#include <stdio.h>
int main() {
    char str[100]; //存储多个字符的变量
    gets(str); //接收多个字符
    puts(str); //输出接收到的字符
    return 0;
}

str 是一个字符数组,可以存储多个字符。gets() 将接收到的字符存储到 str 中,puts() 会将 str 中的字符全部输出。程序的运行结果为:

abc↙
abc

3) scanf()

scanf() 可以接收任何类型的数据,完全可以替代 getchar() 和 gets()。

scanf() 的用法和 printf() 类似,需要套用如下格式:

scanf(格式控制字符串 , 地址1, … , 地址n);地址1 ~ 地址n 通常是变量的首地址。C语言中,变量的地址可以用&获取,例如&a表示获取 a 变量的首地址。

格式控制字符串表示以固定的格式读取用户输入的数据,内部可以包含两部分内容:

  • 普通字符:scanf() 会原样读取这些字符;
  • 格式控制符:表 1 中罗列的所有格式控制符,完全适用于 scanf()。

有些格式控制符,%后面可以插入下表所示的修饰符:

修饰符说 明
m(代表一个正整数)限制最多读取的字符数量。
*丢弃读到的数据。

例如:

#include <stdio.h>
int main() {
    int n, m;
    char c;
    scanf("%c", &c);//读取一个字符存到变量 c 中
    scanf("n=%2d", &n); //读取长度为 2 的整数存到变量 n 中
    scanf("%d", &m); //读取一个整数存到变量 m 中
    printf("c=%c,n=%d,m=%d", c, n, m);
    return 0;
}

运行结果为:

An=34567↙
c=A,n=34,m=567使用 scanf() 时,需要注意以下几点:

  • scanf() 需要的是变量的地址,而不是变量名;
  • 在格式控制字符串中,如果除了格式控制符外还有其它普通字符,那么输出数据时必须在对应的位置上输入这些字符;
  • 使用%c读取一个字符时,空格和转义字符都会作为有效字符被读取;
  • scanf()读取数据时,一旦遇到不符合格式控制字符串要求的字符,就会立即终止读取。
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情