标签:add 数字 std 就是 lin line etl ddr 指定
来源:c++ primer plus
在c++里当我们输入一个字符串时习惯用cin,但是cin只能读取一段不含空格的字符串,如果我们需要读取一段包含空格的字符串时,就需要用到getline()或get()。下面介绍getline()和get(),这两个都是读取到换行符结束。
1.getline():
假设现在我们要输入一个名字,保存在name数组里:
#include<iostream>
using namespace std;
int main()
{
char name[10];
cin.getline(name,10);
cout<<name<<endl;
return 0;
}
//第一次输入:123456 第一次输出:123456
//第二次输入:1234567890 第二次输出:123456789
调用方式是cin.getline(),里面有两个参数,分别是数组名和数组长度,在这里要注意的是如果长度是10,那么最多只会读取9个字符,因为还有一个位置要留给空字符‘\0‘,如果只输入5个,那么剩余的都会用空字符来补满。对于getline(),它一直读取到遇到换行符或到达指定数目字符时结束,然后换行符会被丢弃,不留在输入队列里(这是接下来它和get()的细微区别)。
getline()也可以这样用:
#include<iostream> using namespace std; int main() { char name1[10],name2[10]; cin.getline(name1,10).getline(name2,10);
//第一次调用返回一个cin对象,然后这个对象再调用getline() cout<<name1<<‘ ‘<<name2<<endl; return 0; } /*输入: 123 456 输出:123 456 */
2.get():
get()和getline()很像,也是两个参数,但是get()读取到换行符停止时,换行符会留在输入队列里,下一次读取时就会再次读取到换行符,导致读取为空。
例如:
#include<iostream> using namespace std; int main() { char name1[10],name2[10]; cin.get(name1,10); cin.get(name2,10); cout<<name1<<‘ ‘<<name2<<endl; return 0; } /*输入:123 输出:123 */
在这里我是想输入123再输入456的,但是我没机会了,因为输入123时遇到换行符然后停止,第二次调用时这个换行符还在输入队列里,程序就会再次停止,后面就读取不到内容了。
当cin.get()里面没用参数时,它会吸取一个字符,包括换行符,所以我们可以这样:
#include<iostream> using namespace std; int main() { char name1[10],name2[10]; cin.get(name1,10); cin.get(); cin.get(name2,10); cout<<name1<<‘ ‘<<name2<<endl; return 0; } /*输入: 123 456 输出: 123 456 */
也可以这样写:
#include<iostream> using namespace std; int main() { char name1[10],name2[10]; cin.get(name1,10).get(); cin.get(name2,10); cout<<name1<<‘ ‘<<name2<<endl; return 0; } /*输入: 123 456 输出: 123 456 */
空行和超出分配空间都会导致出错,应该尽量避免。
还有就是当我们在实际运用中可能要数字和字符串混合输入,这个时候容易出错,举一个书上的例子:
#include<iostream> using namespace std; int main() { int year; char address[20]; cin>>year; cin.getline(address,20); cout<<year<<endl; cout<<address<<endl; return 0; } /* 输入输出: 2018 2018 */
我们输入了年份,这个时候换行符还在输入队列里,然后调用getline()时遇到换行符,直接结束读取。。。,这里可以用cin.get()来吸收换行符。
差不多就这么多吧。
标签:add 数字 std 就是 lin line etl ddr 指定
原文地址:https://www.cnblogs.com/6262369sss/p/9385839.html