输入流 输入函数

时间:2023-02-24 19:30:31

输入流是就是一串连续的字符,比如我们输入一个回车, 三个空格,然后再输入数字12,接着再输入字母a,空格,bc,然后再回车,再输入3,空格,4def,那么该输入流实际上就是这样的一个字符串: ‘\n’_ _ _12a _ bc'\n'3 _ 4def, 其中'\n'表示字符换行,下划线表示字符空格。 当我们要从输入流中读取某特定类型的数据时,就从输入流的首字符开始读,直到读到不属于于该类型的字符或结束字符。

假设输入流就是上述的字符串

int Int;

char c;

char c_arr[10];

string str;

cin >> Int  从首字符开始读,丢弃所有的空白字符,直到读到数字字符,然后遇到非数字字符结束。
这里首字符就是换行符,丢弃换行符和3个空格,然后读取数字字符,遇到非数字字符a结束,
然后把12转换成整数赋给Int,此时输入流首字符指向 a
cin >> c 从输入流中读取第一个非空字符,这里读取的就是1
cin >> c_arr 从首字符开始读,丢弃遇到非空字符前的所有空白字符(首字符是换行也同样丢掉),遇到非空字符后的第一个空白字符结束读取,
不丢弃读取结束时的空白字符。这里c_arr从输入流中读取后就变成12a,首字符指向a后面的空格
cin >> str 同 cin >> c_arr
   

读取一个字符

cin >> c  
cin.get(c) 读取字符,空白字符也是有效的,返回cin,遇到EOF返回false
c = cin.get() 读取字符,空白字符也有效,返回字符的整数值,遇EOF返回EOF


读取一个字符串

char* gets(char* ptr) 从输入流中抽取字符,直到遇到换行符,并扔掉换行符。如果输入流首字符就是换行符,则直接结束并丢弃这个换行符
该函数在<cstdio>头文件中
cin.get(char* ptr, int n, char = '\n') 从首字符开始读取,不忽略空白字符,读取n个字符结束,如果没读完n个就遇到结束字符,不丢弃结束字符,结束
cin.getline(char* ptr, int n, char = '\n') 从首字符开始读取,不忽略空白字符,读取n个字符结束。如果没读完n个就遇到结束字符,丢弃结束字符,结束
cin.ignore(int n, char = EOF) 从首字符开始,丢弃n个字符,包括空白字符。如果没丢掉n个就遇到结束字符,丢弃结束字符,结束

有三个函数会丢弃结束字符:gets(char*), getline(char* , int, char), ignore(int, char)


C语言

scanf("%c", &ch); // 读取第一个字符,就算是空白字符

scanf("%s", ch_arr); // 忽略前面的空白字符,从第一个非空字符开始读,遇到空白字符结束,不丢弃空白字符

int getchar(); // 读取输入流中的第一个字符,空白字符也有效,返回该字符的ASCII值

gets(char*); // 同上面C++中的总结

--------------------------------------------------------总结方式2------------------------------------------------------------------------

istream

cin >> ch 读取第一个非空字符
ch = cin.get() 读取第一个字符,非空也有效,返回字符对应的整数值,遇EOF返回EOF
cin.get(ch) 读取第一个字符,非空也有效,返回cin,遇EOF返回false
cin.get(char* buffer, int n, char = '\n') 从首字符开始读取,不忽略空白字符,读取n个字符结束,如果没读完n个就遇到结束字符,不丢弃结束字符,结束
cin.getline(char* buffer, int n, char = '\n') 从首字符开始读取,不忽略空白字符,读取n个字符结束。如果没读完n个就遇到结束字符,丢弃结束字符,结束
cin.ignore(int n, char = EOF) 从首字符开始,丢弃n个字符,包括空白字符。如果没丢掉n个就遇到结束字符,丢弃结束字符,结束

cstdio

scanf("%c", &ch) 读取第一个字符,就算是空白字符
scanf("%s", ch_arr) 忽略前面的空白字符,从第一个非空字符开始读,遇到空白字符结束,不丢弃空白字符
int getchar() 读取输入流中的第一个字符,空白字符也有效,返回该字符的ASCII值