C/C++ 中几种输入/输出 以及其中的bug

1 篇文章 0 订阅

1.输入缓存区与终端缓存区

键盘输入的数据会先直接到 输入缓存区(包括你打的回车,空格之类的,全部都会到输入缓存区) , 然后会有一部分数据被抛弃 另一部分到输出缓存区;这里再顺便说一下空白字符 指空格 回车 制表这些;

2. cin 与 cout

注:字符串的输入 会舍弃一切空白 而字符的输入也会舍弃一切空白字符;
字符或者字符串在输出的时候 也会舍弃一切空白字符;
char a[10] , b[10];
cin>>a; //cin 在C++中相当于scanf
cin>>b; // 12345 6789;
cout<<a<<endl;
cout<<b<<endl;
输入12345 6789
这时候输出的时候会发现
12345
6789
原因是因为 cin 在遇到 空白(空格,制表,或者换行符)会自动结束输入;
cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当输入缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!而scanf 与 cin 有相同的问题都会抛弃回车;

3.scanf与 printf

注:字符串的输入 会舍弃回车 而字符的输入不会舍弃回车
但是不管字符还是字符串输入其他的空白字符 如空格输出都会舍弃
scnaf有一种办法可以改变这种情况 scanf("%[ ^\n]") ^是按位取反 简单来说就是读取除了\n外的字符
using namespace std;
char ch1[10], ch2[10];
scanf("%s", &ch1);
scanf("%s", &ch2);
//printf("%d %d\n", ch1, ch2);
printf("%s\n", ch2);
printf("%s\n", ch1);
return 0;
输入 12345 6789
输出
6789
123456

4.getchar()与putchar

输入字符时
getchar 会把回车当字符输入 并且putchar会输出
但是别的比如空格这些 也会输入 但是 putchar不会输出;(简单来说输出没事了话最好别用putchar)
这里再说一下getchar()的一种骚操作,嗯,很多时候在一些编译器上程序运行后会一闪而过,这时候在程序末尾放一个getchar() 意思就是说你输入完之后你要输入一个回车程序给getchar getchar读入了数据之后程序就完成了 也就结束了,也就是ACMer们俗称的吃回车
#include"iostream"
#include <stdio.h>
int main()
{
using namespace std;
char ch1, ch2;
ch1 = getchar();
ch2 = getchar();
putchar(ch2);
putchar(’\n’);
putchar(ch1);
return 0;
}

5.gets 与 puts

gets 与getchar正好相反 他会读取空格这些字符 但是它不会读取回车;
puts 这个函数会自带换行
#include"iostream"
#include <stdio.h>
int main()
{
using namespace std;
char ch1[10] , ch2[10];
gets(ch1);
gets(ch2);
puts(ch1);
puts(ch2);
printf(“wo”);
return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值