缓冲流的理解

几个C特殊的格式:

1、 scanf可以滤去一些不想要的东西。

举例说明如下:
比如:
输入:a = 1,b = 2;
scanf(“a = %d,b = %d”, &a, &b);
再比如:
scanf("%d %*d %d",&a, &b);
输入1 2 3回车(系统将1赋予m,将3赋予n,因为*号为忽略输入修饰符,表示跳过它相应的数据所以2不赋予任何变量)


2. 字符串输入
getchar(), scanf(“%c”); scanf(“%s”), gets()区别

其中getchar() 和 scanf(“%c”)的功能是一样的。
这两个函数读入的是输入流中当前位置的字符,比如:
scanf(“%d”,&n);
c = getchar();
假设输入 67/ (假设“/”代表回车),则第一个scanf读入一个整数67后,当前输入流的位置是67之后,即指向回车符,所以第二个getchar()读入的就是一个回车符了,即 c = ‘\n’。
同样,gets()也是从当前位置读入一行字符串。
比如:
scanf(“%d”,&n);
gets(str);
此时读入字符数组中的字符串就是“\n” 了
所以通常在用scanf读入一个非字符串的类型之后,如果要读入字符,或字符数组,都用一个额外的getchar()把回车符读掉,若后面跟的不止一个回车符,可能还有多余的空格的话,就用gets()读掉。
和以上不同的是,scanf(“%s”) 读入的时候是会忽略掉空格,回车和制表符的。并且以空格,回车和制表符作为字符串结束的标志。
也就是说,scanf("%s")其实是比较特殊的,它一定会等到所有空白符结束,一直等到它要等的字符串出现,它才读取,在字符串出现之前,出现的所有空白符都会忽略掉。


1.一些特殊字符的输出:
单引号,双引号,和反斜杠的输出在前面加转义字符”\”
如:”\’” , “\”” , “\\”
%的输出用两个连在一起的%%,即printf(“%%”);
2. double型 应该用%lf来输入和输出,否则错误!
3. 对64位整数的输入输出,
64位整数是:
__int64 (注意int前面是两个下划线
输入输出格式为“%I64d”.
4.long long应该用"%lld"输入输出。
5. 正负号 
- 结果左对齐,右边填空格 
+ 输出符号空格输出值为正时冠以空格,为负时冠以负号
6. 输出宽度和小数点后的位数(或字符串截取长度)
%5.3lf
表示右对齐,5为格式宽度,3为保留小数点后3位(四舍五入)
%-7.2s
表示左对齐,7为格式宽度,2为截取字符串中前2个字符。
7.%g的使用,%g是自动选择%f和%e中的一种,根据输出的长短选择短的那个,有一个关键的应用是,%g在输出时会自动删去double后面多余的0,这个应用比较广泛。
很重要的一点:千万不要把cout和printf混用,因为cout是带缓冲的而printf不带,所以会使得输出的数据顺序混乱

%d %lld %lf自动扫描前导空格
 
 
• 读一个非空白字符,方法一
char str[2];
scanf(“%1s”, str);
// %s扫描前导空白,并且只读一个字符
char c = str[0];
• 方法二
– 强制扫描空白
– 在%前面加上一个空格表示“强制扫描前导空白”
– scanf(“ %c”, &ch);
– 前面那个读人物信息的完整scanf语句:
• scanf(“%s %c %s”, name, &gender, ability);
• 同理,格式后面加一空格表示“读完这个变量后扫描空白”,注意空白是包括回车的


C++的I/O:
1.cin>> cout<< 当输入数据量特别大时建议使用scanf ,效率会大大提升。
2.输入含空格等的字符串时,可以使用:
cin.getline(str) 或者
getline(cin,str)
未提示输入结束标记时 用
while(cin.getline(str)) 或者while(getline(cin,str))
3.无论用cin还是scanf ,读入字符之后若要再继续读入,应消去换行符,可使用scanf("%*c")或者getchar().


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值