输入和输入纪要

1、背景

最近刷题过程中,发觉自己对于输入、输出相当不了解,本身也不常用这些。现在想来错过一个亿。因此,从网络中搜集了一些数据,并测试后总结如下。

2、输入

2.1 输入可调用

 

2.2 scanf的使用技巧

函数原型
#include <stdio.h>
int scanf(const char *format, ...);

scanf()是C语言中格式输入函数,

根据format中的转化符,在format后添加地址,方便把从读取到的字符按照转换类型转化为所规定的格式,然后把它放入到输入变量中。即输入类型要与占位符(转化符)相一致。

format中包括转化符和普通字符

2.2.1 注意点1、输入字符的前导空格

如scanf("%c", &c); 如果你输入" a"(a前面有一个空格),此时空格就被c接收了。

因此为了避免空格输入、换行、tab的误操作,,在format中添加一个前导空格。

scan(" %c", &c);

2.2.2 注意点2、输入十六进制数

scanf("%x", &num); 输入0x或0X 或不输入,均可识别;

2.2.3注意点3、在format中使用正则表达式

char str[100] = {0};

char tripstr[100] = {0};

scanf("%[a-zA-Z0-9]", str);    //匹配[]内的字符遇到非集合内的字符时立即终止输入

scnaf("%[^abc]",tripstr);      //^表示求反集 

2.2.4 注意点4、scanf返回值

成功,函数返回成功匹配和分配的item数

失败,第一个遇到了错误或文件尾,则返回EOF(-1);第一个就没匹配上,则返回0;

2.2.5 注意点5、遇到什么结束

scanf("%d", &num);

遇到第一个不匹配的就直接结束;返回匹配

scanf("%s", buff); //遇到第一个非空格字符开始记录,到回车结束,‘\n‘转为‘\0’。

scanf("[a-z 0-9A-Z]", buffer); //遇到匹配的开始记录,到回车结束;但是只记录到遇到不匹配之前的,可接受空格 

2.2.6 注意点6 使用*读入不存功能

scanf("%d%^c%d", &a, &b);

 

2.3 fgets的技巧

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);


If a newline is read, it is stored into the buffer.

fgets()从stream中读取至多size个字符存入s中。读操作由EOF或换行结束。注意读取一行时,‘\n’会被读入,且在末尾添加'\0'作为字符串结束符。 

因此此时用strlen(s);读取s字符串的长度,则其中包含'\n'.

2.4 getline的技巧

#include <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);


The  buffer  is  null-termi‐nated and includes the newline character, if one was found.

getline() 从stream中读取完整一行,存入*lineptr中。同样换行符'\n'和结束符'\0'在*lineptr中


 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值