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;
}