输入
cin
cin使用空白(空格,制表符,换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。读取该单词以后,cin将该字符串放到数组中,并且自动在结尾添加空字符。
每次读取一行字符串输入
isrteam中的类(如cin)提供了一些面向行的类成员函数:getline()和get();这两个函数都是取一行输入,直到遇到换行符,然而,随后getline()将会丢弃换行符,而get()将换行符保留在输入序列中。
面向行的输入:getline()
getline()函数读取整行,它使用回车键输入的换行符来确定输入结尾。
要调用这种方法,可以使用cin.getline()。该函数有两个参数,第一个参数是用来存储输入行的数组名称,第二个参数是要读取的字符数,如果这个参数是20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加空字符。
getline()函数在读取指定数目的目的字符或者遇到换行符时停止读取
getline()函数每次读取一行,它通过换行符来确定行尾,但不保存换行符,相反,在存储字符串的时候,它用同字符来代替换行符;
#include <iostream>
using namespace std;
void test02()
{
const int size = 6;
char a[10];
char b[10];
cin.getline(a, size);
cout <<"输出a:"<< a << endl;
cin.getline(b, size);
cout << "输出b:"<<b << endl;
}
int main()
{
test02();
system("pause");
system("cls");
return 0;
}
面向行的输入:get()
该函数有几种变体,其中一种变体的工作方式与getline()类似。它们的接收参数相同,解释参数也相同,并且都读取到行尾,但是get并不会读取丢弃换行符
const int size = 6;
char a[10];
char b[10];
char c[10];
cin.get(a, size);
cout <<"输出a:"<< a << endl;
cin.get(b, size);
cout << "输出b:"<<b << endl;
cin.get(c, size);
cout << "输出c:" << b << endl;
连续两次调用get():
由于第一次调用后,换行符就会留在队列中去,因此第二次调用时看到第一个字符也是换行符,因此cin()认为已经到达了行尾,而并没有发现任何可以读取的内容。
幸运的是,cin()有另一种变体:使用不带任何参数的cin.gte(),调用可以读取下一个字符(即使是换行符),因此可以用它来处理换行符
混合字符串和数字
用户根本没有输入地址的机会。当cin读取年份,回车键生成的换行符留在了输入队列中,后面的cin.getline*(看到换行符后,将认为是一个空行,并且将空字符串赋给address数组。
可以通过使用没有参数的get()或者使用接受一个char参数的get