c c++控制台终端输入输出方法(getline cin scanf printf getchar put get)全总结
目录控制台输入cscanfgetchar( )getline( )c++cinstring 类:getlinecin.get( )控制台输出cprintfputc+++ cout+缓冲区在键盘输入:absd skd! skdjf-skjdfk‘\r’每一个字符都会用asic码进行存储当读入到‘\r’时,整个一行将会存入缓冲...
目录
- 控制台输入
- c
- scanf
- getchar( )
- getline( )
- c++
- cin
- string 类:getline
- cin.get( )
- c
- 控制台输出
- c
- printf
- put
- c++
+ cout
+
- c
缓冲区
在键盘输入如:
absd skd! skdjf-skjdfk<回车>
每一个字符在电脑中都会用asic码进行存储
当读入到<回车>时,整个一行将会存入缓冲区
代码里写的cin等都是从缓冲区拿
string类:getline
getline()函数的定义如下所示
+ istream& getline ( istream &is , string &str , char delim )
+ istream& getline ( istream &is , string &str )
is 进行读入操作的输入流
str 用来存储读入的内容,注意是string类,而不是字符数组的指针
delim 终结符,遇到该字符停止读取操作,不写的话默认为回车(需要注意缓冲区的遗留)
注意问题1:
getline会处理读入的回车字符(默认),将其从缓冲区取走,但是并不存入string对象里,如果缓冲区只剩下一个‘\r’,getline会读走这个回车,string类对象仍为空
注意问题2:
可以看到getline返回的是一个istream的对象,所以可以继续进行对于istream对象的操作,并且,返回有值,当输入文件终止符时,getline返回值为1
实例代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
int n = 0;
cin >> n;
vector<string> arr(n);
for (int i = 0; i < n; i++) {
getline(cin, arr[i]);
}
for (int i = 0; i < n; i++) {
cout << i << arr[i] << endl;
}
return 0;
}
运行结果如上,可以看到,我输入2之后的回车,跟着2进入了缓冲区,cin读取了2并赋值给n,第一次的getline读取到的就是第一个回车前的空,(并且并没有读入这个回车,因为如果读入了输出应该有额外的一个空行)
那么如果在两次getline后,cin会读到什么:
int k;
cin >> k;
cout << k;
所以cin实际上是舍弃了缓冲区留下的那个回车,继续等待键盘的输入的
c语言中getline
头文件istream中
istream& getline (char* s, streamsize n );//读取最多n个字符保存在s对应的数组中,即使大小不够n,
istream& getline (char* s, streamsize n, char delim ); //读取最多n个字符保存在s对应的数组中,遇到delim,或者读完一行,或字数达到限制则终止
此时需要注意的就是,这是字符数组,需要有结束字符的位置
示例代码
#include<iostream>
using namespace std;
int main() {
char a[5];
cin.getline(a, 3);
char x, y;
cin >> x >> y;
cout << x << y << endl;
cout << a << endl;
return 0;
}
竟然出现了烫!!
那么分析一下,我只输入了abcde五个字符,缓冲区是abcde加一个回车,那么cin.getline(a, 3);读入的是ab因为第三个位置留给了结束字符,缓冲区剩下的是cde,被两个cin读取,又因为读取的形式是char型,所以出现了非法字符
更改如下:
char a[5];
cin.getline(a, 5);
char x, y;
cin >> x >> y;
cout << x << "11111" << y << "11111"<<endl;
cout << a << endl;
return 0;
十分完美,只读入了abc是因为没有到达位数就遇见了默认终止回车
更多推荐
所有评论(0)