Linux-C基础之输入输出函数

2023-11-15

一,输出

(一)数据输出

C语言无I/O语句,I/O操作由函数实现

#include <stdio.h>

(二)字符输出函数

格式: putchar( c )
参数: c为字符常量、变量或表达式,要是int值。
c也可以是字符常量,“\n”。
c是将字符的ASCII码值作为参数的。
功能:把字符c输出到显示器上,就是输出c的ASCII码值。
返值:正常,为显示的代码值;只输出一个字符

例子,——~/practice/level1/day3/putchar.c

#include <stdio.h>
main()
{ int c;
char a;
c=65; a='B';
putchar(c); putchar('\n'); putchar(a);
}

运算结果为:A(A的ASCII码值为65,所以putchar(65)=输出A)
B

(三)格式输出函数

格式:printf(“格式控制串”,输出表)(使用范围最广)
功能:按指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出格式
普通字符:原样输出
字符:

p 地址

(五)格式字符

int a=567;printf ( “%d”,a); //567
int a=255;printf(“%x”,a); //ff
int a=65;printf(“%o”,a); //101
int a=567;printf(“%u”,a); //567
printf(“%s”,“ABC”); //ABC
float a=567.789;printf(“%e”,a); //5.677890e+02
float a=567.789;printf(“%f”,a); // 567.789000
float a=567.789;printf(“%g”,a); // 567.789
printf(“%%”); //%

(六)附加格式说明符


·m:通常使用m来是的输出的记过整齐。
:实际数据位数小于m则在左侧补空格,反之按实际输出。
·n:对于字符串实际输出位数从左往右数。

(七)输出函数格式字符

例 m.n

int a=1234;
float f=123.456;
char ch=‘a’;
printf(“%8d,%2d\n”,a,a); 
printf(“%f,%8f,%8.1f,%.2f\n”,f,f,f,f); 这里的8.1就是m.n
printf(“%3c\n”,ch);



static char a[]=“Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);

运行结果:

Hello,world!
Hello,world!
Hello
Hello
Hel 

(八)格式输出函数


0 、+

int a=1234;
float f=123.456; 
printf(“%08d\n”,a); 
printf(“%010.2f\n”,f); 
printf(“%0+8d\n”,a); 
printf(“%0+10.2f\n”,f); 

二、输入

(一)字符输入函数:

字符输入函数getchar
-格式: getchar( )
-功能:从键盘读一字符
-返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl d:结束输入)

#include <stdio.h>
int main()
{ int c; //因为字符型太小,只到127,unsigned char 无符号,返回值-1无法显示
printf("Enter a character:");
c=getchar();
printf("%c--%d->hex%x\n", c, c, c);
}

运行结果:

Enter a character:A
A--65->hex41

(二)格式输入函数

格式输入函数scanf,与printf相似。
-格式: scanf(“格式控制串”(这里不可以加\n),地址表)
-功能:按指定格式从键盘读入数据,存入地址表指定
-存储单元中,并按回车键结束
-返值:正常,返回输入数据个数
-地址表:变量的地址,常用取地址运算符&

int ch;
printf(">"); ——打印>
scanf("%x",&ch);——输入十六进制数ch,ch就为输入数的存储地址
printf("%d\n",ch);——输出ch的十进制数

目前,scanf支持的格式字符很多,如下:

scanf函数支持的格式说明符可以带以下修饰符

  • l 对于long而言指定为整数,不看小数。
    double而言,制定为实数
    号是输出时,将用户输入的有部分数据扔掉。

例1
scanf(“%4d%2d%2d”,&yy,&mm,&dd);(4d中的4即为m修饰符。制定输入数宽度)
若输入19991015, (虽然没有空格,但是上一行4,2,2已经制定了输入宽度)
则yy为1999, mm为10, dd为15

例 2

scanf(“%2d%*3d%2d”,&a,&b);

若输入1234567
则a为12,b为67

说明:
用“%c”格式符时,空格和转义字符作为有效字符输入
例子

scanf(“%c%c%c”,&c1,&c2,&c3);

若输入abc
则c1为a, c2为空格, c3为b

总结,输入数据时,遇以下情况认为该数据结束:
1,遇空格、TAB、或回车
2,遇非法输入
3,遇宽度结束

例子,

ret=scanf(“%d%c%f”,&a,&b,&c);

若输入1234a123o.26
则a为1234, b为‘a’, c为123

三,字符串的输入输出

(一)输入函数留下的“垃圾

使用输入以下函数可能会留下垃圾

int x;
char ch;
scanf(“%d”,&x);
scanf(“%c”,&ch);
printf(“x=%d,ch=%d\n”,x,ch);

清除方法:
方法1:用getchar()清除

int x;
char ch;
scanf(“%d”,&x);
getchar();
ch=getchar();
printf(“x=%d, ch=%d\n”, x, ch);

方法2:用格式串中空格或“%*c”来“吃掉”

int x;
char ch;
scanf(“%d”,&x);
scanf(“ %c”,&ch);或 scanf(“%*c%c”,&ch);

当scanf整形转字符型时,必定多出回车,一定要处理。

(二)字符串输入函数(gets,puts配对用)

字符串输入函数gets
格式: char * gets(char *s)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明1:输入串长度应小于字符数组维数
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。
字符串默认只能输入十个,但是只要是字符串最后就会有一个\0
所以老师演示时字符串长度控制为5
gets以\0结尾,scanf以空格、回车、teb结尾。
在这里插入图片描述
这个gets(s),可以用scanf(“%s”,s)代替。
区别:
1,gets可以输入多个,不受空格影响;
2,scanf,用%s,则遇空格结束。
若用%c来将空格带入,则需要用循环来制定字符串长度,否则无法打印全部。
举例如下

int main( )
{ char string[15];
printf(“Input a string:”);
gets(string);
printf(“%s\n”, string);
return 0;
}

(三)字符串输出函数

字符串输出函数puts
格式:int puts(const char *s)
功能:向显示器输出字符串(输出完自动换行)
说明:字符数组必须以‘\0’结束
举例如下

#include <stdio.h>
int main( )
{ char string[80] = “How are you”;
puts(string);
return 0;
}

输入: How are you?
输出: How are you ?

四,输出换行符

1,printf(“\n”);
2, putchar(‘\n’);
3, puts(“”);

五,数据输入输出综合示例——~/practice/level1/day3/inout.c

从键盘输入a、b、c的值,求一元二次方程 y = ax2+b的根,
计算公式如下:

#include<stdio.h>
#include<math.h>

int main(int argc, char *argv[])
{
	float  a,b,c,x1,x2;
	double q;

	printf("input a b c:");
    scanf("%f %f %f",&a,&b,&c);

	//gets(a,b,c);
	q = sqrt(b*b-4*a*c);
	
	x1 = (-b+q)/(2*a);
	x2 =( -b -q)/(2*a);
		
	printf("x1=%f,x2=%f\n",x1,x2);
		
		
		return 0;
}

输入一行字符,原样打出:

只要不遇到换行就一直打印!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux-C基础之输入输出函数 的相关文章

  • Putty配色方案(转)

    平时用Putty的频率相对挺高的 每次装完系统或是怎么的都得重新配色 还得百度去找配色表 每次太麻烦了 特地转载一篇好看的配色表供以后长期使用 以下内容为转载内容 使用的是修改注册表的方法 1 打开注册表 运行 regedit 2 找到对应
  • 区块链的简单实现

    区块链的简单实现 什么是区块链 块结构 创世区块 hash 验证块的有效性 记录数据 从其他节点接收一个块 编写测试代码 测试结果 完整代码 什么是区块链 一个维护着一个持续增长的有序数据记录列表的这么一个分布式数据库 下面我将简单用nod
  • 模型选择、欠拟合和过拟合

    训练误差 training error 模型在训练数据集上表现出的误差 泛化误差 generalization error 模型在任意一个测试数据样本上表现出的误差的期望 常常通过测试数据集上的误差来近似 机器学习模型应该关注泛化误差 模型
  • Latex学习笔记二——Overleaf在线练习

    锵锵 本文是基于Overleaf的Latex学习的第二部分 目录 1 结构化文档 2 添加图表 让论文更生动可读 2 1 Graphics 2 2 Floats 2 3 Tables 3 Bibliographies 1 结构化文档 这一部
  • Hadoop的伪分布式运行模式

    Hadoop运行模式包括 本地模式 伪分布式模式 以及完全分布式模式 1 本地模式 安装简单 在一台机器上运行服务 几乎不用做任何配置 但仅限于调试用途 没有分布式文件系统 直接读写本地操作系统的文件系统 2 伪分布式模式 在单节点上同时启
  • MAC 命令行拷贝文件夹

    命令 cp R 源文件 目标文件 cp R libsvm 3 23 Applications MATLAB R2017b app toolbox 将当前目录下的libsvm 3 23拷贝到 Applications MATLAB R2017
  • java学习笔记13--反射机制与动态代理

    本文地址 http www cnblogs com archimedes p java study note13 html 转载请注明源地址 Java的反射机制 在Java运行时环境中 对于任意一个类 能否知道这个类有哪些属性和方法 对于任
  • Game101现代计算机图形学入门学习笔记(七)

    光线追踪 一 光线追踪 1 为什么要使用光线追踪 二 基础光线追踪算法 1 光线 2 光线投射 1 着色过程 3 递归光线追踪 Whitted Style 1 基本过程 2 光线 表面相交 1 光线方程 3 轴对称包围盒 AABB 1 Un
  • OCaml学习笔记(二)——Introduction to Objective Camel

    Chapter2 Simple Expressions 2 1 注释语句 OCaml语言中注释部分写在 和 之间 可以相互嵌套 注释部分当作空格处理 2 2 基本表达式 OCaml中每个有效的表达式都有一个类型 某个类型的表达式不能用作其他
  • Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一 基于tkinter实现的UI设计 1 1 库的选择及思路 1 2 定位方法的选用 1 3 Frame控件 1 4 变量设置 1 5 批量设置 1 6 Text文本框 1 7 总体界面设计 1 8 功能
  • java I/O流的一些常用操作

    java i o 的一些操作 文件流 FileInputStream FileOutputStream FileReader FileWriter 这四个类是专门操作文件流的 用法高度相似 区别在于前面两个是操作字节流 后面两个是操作字符流
  • python的文件操作

    一 文件的基本操作 1 读文件read f open filename r encoding utf 8 data f read 读文件 f close 关闭文件 1 绝对路径的易错点 文件路径中 前要加转义字符 或者 使用r使转义字符失效
  • 图像检索传统算法学习笔记

    图像检索领域传统算法学习笔记 与组内同学一起找到的一些图像检索传统算法 作一小结 以防忘记 性能统计 传统图像检索算法 CIFAR 10数据集mAP值 编码数不同 LSH局部敏感哈希 0 116 0 131 SH谱哈希 0 124 0 12
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • 2022全国职业技能大赛-网络安全赛题解析总结④(超详细)

    2022全国职业技能大赛 网络安全赛题解析总结 自己得思路 模块A 基础设施设置与安全加固 20分 模块B 网络安全事件响应 数字取证调查和应用安全 40分 模块C CTF夺旗 攻击 20分 模块D CTF夺旗 防御 20分 有什么不懂得可
  • CST2020 安装包和安装步骤

    安装包和破解码的百度云链接 链接 https pan baidu com s 1RNSWxVxb DIu8dg8gkCzAw 提取码 dve7 如果失效可评论留言 谢谢 1 关闭防火墙和杀毒软件 2 解压后 以管理员模式运行setup文件
  • 不在傻傻for循环!完美解决JPA批量插入问题

    前言 jpa在简单的增删改查方面确实帮助我们节省了大部分时间 但是面对复杂的情况就显得心有余而力不足了 最近遇到一个批量插入的情况 jpa虽然提供了saveAll方法 但是底层还是for循环save 如果遇到大量数据插入频繁与数据库交互必然
  • 10个 Python 脚本来自动化你的日常任务

    在这个自动化时代 我们有很多重复无聊的工作要做 想想这些你不再需要一次又一次地做的无聊的事情 让它自动化 让你的生活更轻松 那么在本文中 我将向您介绍 10 个 Python 自动化脚本 以使你的工作更加自动化 生活更加轻松 因此 没有更多
  • C 库函数 - mktime()

    描述 C 库函数 time t mktime struct tm timeptr 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数 发生错误时返回 1 声明 下面是 mktime 函数的声明 time
  • 如何设计一个高并发系统?

    所谓高并发系统 是指能同时处理大量并发请求 并及时响应 从而保证系统的高性能和高可用 那么我们在设计一个高并发系统时 应该考虑哪些方面呢 1 搭建集群 如果你只部署一个应用 只部署一台服务器 那抗住的流量请求是非常有限的 并且 单体的应用

随机推荐