几种输入输出数据的方法
创始人
2025-06-01 00:13:48
0

文章目录

    • 几种输入输出数据的方法
      • 一.用函数putchar输出单个字符数据
      • 二.用函数getchar输入单个字符数据
      • 三.用函数printf按指定格式输出数据
        • 1.printf函数调用的一般形式
        • 2.printf函数的格式控制字符串
          • (1).格式说明符
          • (2).转义字符
          • (3).普通字符
        • 3.printf函数的几种常用输出形式
          • (1)d格式符
          • (2)c格式符
          • (3)s格式符
          • (4)f格式符
            • 基本型%f
            • %m.nf形式
            • %-m.nf形式
          • (5)e格式符
            • 基本型%e
            • %m.ne形式
            • %-m.ne形式
          • (6)转义字符
      • 四.用函数scanf按指定格式输入数据
        • 1.scanf函数调用的一般形式
        • 2.scanf函数的格式控制字符串
        • 3.使用scanf函数需要注意的几点

几种输入输出数据的方法

C语言最基本的数据输入输出函数有4个,可分为字符输入输出函数和格式化输入输出函数两类。

一.用函数putchar输出单个字符数据

putchar函数是字符输出函数,功能是在显示器上输出一个字符。使用形式为:
putchar(c);

其中:c为字符型数据或整型数据,当为整型数据时,它的值一般应是一个可见字符的ASCII码,否则没有实际意义。

#include
int main() {char c = 'A'; putchar(c);    //输出字符Aputchar('\n'); //输出换行符putchar('b');  //输出breturn 0;
}

结果:

在这里插入图片描述

注意:

putchar函数只有一个参数,一次只输出一个字符。

二.用函数getchar输入单个字符数据

getchar函数是字符输入函数,功能是读取从键盘上输入的一个字符。使用的一般形式为:

变量 = getchar();

例如:

char c;

c = getchar();

运行时从键盘输入A,则将输入字符A赋予字符变量c。

#include
int main() {char c, d;c = getchar();  //输入字符d = getchar();  putchar(c);     //输出字符putchar('\n');putchar(d);return 0;
}

结果:

在这里插入图片描述

注意:

  1. getchar函数是无参函数,但调用getchar函数时,后面的括号不能省略。getchar函数从键盘上接受一个字符作为它的返回值。
  2. getchar函数只能接受单个字符。输入多于一个字符时,只接受第一个字符。通常把输入的字符赋予一个字符变量,构成赋值语句。
  3. 在输入时,空格、换行符等都作为字符读入。而且,只有在用户按回车键时,读入才开始执行。

三.用函数printf按指定格式输出数据

printf函数称为格式化输出函数,其最后一个字母f即为”格式“(format)之意,功能是按用户指定的格式,把指定的数据默认输出到显示器屏幕上。

1.printf函数调用的一般形式

printf函数是标准库函数,其函数原型在头文件中定义,使用形式为:

printf(格式控制字符串,输出表);

例如:

printf("a = %d",a);

printf("f = %f",f);

其中,格式控制字符串由双引号作为两端界符,用于指定输出格式。输出表列由需要输出的各个数据项组成,可以是常量、变量或表达式,各输出项之间用逗号","分隔。

2.printf函数的格式控制字符串

格式控制字符串可以包含三种字符:格式说明符、转义字符和普通字符。

(1).格式说明符

格式说明符由”%“和格式字符组成,如%d,%f等,其作用是将输出的数据转换为指定的格式然后输出。

printf格式字符

格式字符意义
%d输出十进制形式的带符号整数
%u输出十进制形式的无符号整数
%o输出八进制形式的无符号整数
%x输出十六进制形式的无符号整数,使用小写字母a, b, c, d, e, f
%X与x相同,使用大写字母A, B, C, D, E, F
%f输出小数形式的单、双精度实数
%e输出指数形式的单、双精度实数,指数用e表示
%E与e相同,指数用E表示
%g以%f、%e中较短的输出宽度输出单、双精度实数,指数用e表示
%G与g相同,指数用E表示
%c输出单个字符
%s输出字符串

在格式说明符中的%和字母之间,可以使用附加修饰符。

printf附加修饰符

附加修饰符意义
-结果左对齐,右边填空格
mm是一个整数,表示数据的最小宽度
.nn是一个整数。对实数,表示输出n为小数;对字符串,表示截取的字符个数
L或l表示按长整型输出
(2).转义字符

这些字符用于在程序中描述键盘上没有的字符或某个具有复合功能的控制字符,如\n或\t。

(3).普通字符

除格式说明符和转义字符之外的其他字符,这些字符原样输出。

如:

printf("a1 = %d",a);

printf("f1 = %f",f);

中的字母a1和f1就是普通字符,它可以根据需要来使用,不是必须项。

3.printf函数的几种常用输出形式

(1)d格式符

在输出时,按十进制整数数据的实际长度输出,正数的符号不输出。

#include
int main() {int a = 10;printf("%d\n", a);printf("%5d", a);return 0;
}

结果:
在这里插入图片描述

(2)c格式符

使用c格式符,用于输出一个字符。

#include
int main() {char ch = 'h';printf("%c\n", ch);printf("%5c", ch);return 0;
}

结果:
在这里插入图片描述

一个数值范围0~255范围内的整型数据,也可以使用%c格式符按字符形式输出,输出前,系统会将该整数作为ASCII码转换为相应的字符。

同样,一个字符型数据也可以用%d格式符以整数形式输出其对应的ASCII值。

如:

#include
int main() {int a = 66;char b = 'a';printf("%c\n", a);printf("%d", b);return 0;
}

结果:

在这里插入图片描述

(3)s格式符

使用s格式符,用于输出一个字符串。

#include
int main() {printf("%s\n", "Hello,world");printf("%8s", "Hello");return 0;
}

结果:

在这里插入图片描述

(4)f格式符

使用f格式符,用于以小数形式输出一个实数。

基本型%f

使用不带附加说明符的%f输出,不指定输出数据的长度,由系统根据数据的实际情况决定所占的列数。

#include
int main() {double a = 10;printf("%f", a / 3);return 0;
}

结果:

在这里插入图片描述

说明:

a是双精度型,a/3的结果也是双精度型,但是用基本型%f格式则只能输出6位小数。

%m.nf形式

可以指定数据宽度和小数位数。

m表示该浮点数整体所占的列数,包括整数部分、小数点和小数部分;

n表示该浮点数中小数部分所占的列数,

#include
int main() {double a = 10;printf("%10.3f", a / 3);return 0;
}

在这里插入图片描述

注意:

在用%f格式符输出时要注意数据本身能提供的有效数字,float类型的存储单元只能保证6位有效数字。double类型的数据可以保证15位有效数字。但是超过这个长度的单精度和双精度数据都不能保证其精确度。

%-m.nf形式

%-m.nf形式输出的含义与%m.nf相同,但是数据左对齐,右端补空格。

(5)e格式符

使用e格式符,用于以指数形式输出一个实数。

基本型%e

使用不带附加说明符的%e输出,不指定输出数据的长度和小数部分的位数。

#include
int main() {printf("%e", 123.456);return 0;
}

结果:

在这里插入图片描述

%m.ne形式

用%m.ne形式可以指定数据宽度和小数部分的位数。

#include
int main() {printf("%13.4e", 123.456);return 0;
}

在这里插入图片描述

%-m.ne形式

%-m.ne形式输出的含义与%m.ne相同,但是数据左对齐,右端补空格。

(6)转义字符

如果想输出字符”%“,在”格式控制“字符串中用连续两个%表示。

如果想输出字符”\“,在”格式控制“字符串中用连续两个\表示。

如果想输出字符单引号或双引号,在”格式控制“字符串中用’或\”表示。

#include
int main() {printf("\"Hello,world\"\n");printf("12%%");return 0;
}

结果:
在这里插入图片描述

四.用函数scanf按指定格式输入数据

1.scanf函数调用的一般形式

使用形式:

scanf(格式控制字符串,输入项地址表);

例如:

scanf("%d%f",&i,&f1);

其中,格式控制字符串由双引号作为两端界符,用于指定输入格式。输入项地址表由若干个地址组成,相邻两个输入项地址之间用逗号分开。

输入项地址表中的地址,可以是变量的地址,也可以是字符数组名或指针变量。

变量地址的表示方法为“&”变量名,其中“&”是取变量地址运算符。

2.scanf函数的格式控制字符串

scanf函数的格式控制字符串可以包含三种字符:格式说明符、空白符和非空白符。

(1)格式说明符:用来指定数据的输入格式。

(2)空白符:包括空格、制表符和换行符,通常作为相邻两个输入数据的缺省分隔符。

(3)非空白符:又称普通字符。在输入有效数据时,必须原样输入。

与printf函数的格式说明符相似,scanf的格式说明符也由“%”和格式字符组成。

scanf格式字符

格式字符意义
%d输入十进制形式的带符号整数
%u输入十进制形式的无符号整数
%o输入八进制形式的无符号整数
%x输入十六进制形式的无符号整数,使用小写字母a, b, c, d, e, f
%X与x相同,使用大写字母A, B, C, D, E, F
%f %e %E %g %G以小数或指数形式输入单精度实数
%c输入单个字符
%s输入字符串

scanf附加修饰符

附加修饰符意义
*跳过该输入项,不赋值
l输入长整形数据以及双精度实型数据
h输入短整型数据
mm是一个整数,指定输入的宽度
#include
int main() {int a, b, c;printf("请输入a,b,c的值:");scanf("%d %*d %d %d", &a, &b, &c);printf("s1 = %d,s2 = %d,s3 = %d", a + b, b + c, a + b + c);return 0;
}

结果:

在这里插入图片描述

3.使用scanf函数需要注意的几点

  1. scanf函数中要求输入项地址,应为地址格式,而不是变量名。例如:scanf("%d",a);是非法的,应为scanf("%d",&a);

  2. scanf函数中无精度控制。例如:scanf("%5.2f",&a);是不合法的,而scanf("%5f",&a);是合法的,其中5位输入数据宽度。

  3. 当输入的数据类型为多个数值型数据时,若相邻两个格式指示符之间没有分隔符(如逗号,冒号等),则相应的两个输入项之间可用的分隔符有三种:空格、制表符或换行符。

  4. 当输入的数据类型为字符型数据时,则认为所有输入的字符均为有效字符,特别地,空格和换行符等都作为有效字符被输入。

    例如:scanf("%c%c%c"&a,&b,&c);

    当输入为d e时,则把字符d赋值为a,变量b和c的值为空格。

  5. 在格式控制字符串中出现的普通字符,务必原样输入。

    例如:scanf("%d,%d,%d"&a,&b,&c);

    在运行时输入应为1,2,3

  6. 输入数据时,遇到以下情况时系统认为该数据输入结束:

    (1)遇到空格、制表符或换行符。

    (2)遇到非法输入。

    (3)遇到输入域宽度结束。例如:scanf("%3d",&a);输入数据只取三列。

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...