C++字符串的输入

1、面向单词的输入

int main(){
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];
    cin>>name;
    cin>>dessert;
    cout<<"name is "<<name;
    cout<<"dessert is"<<dessert;
    system("pause");
    return 0;
}

上面的代码若输入姓名时直接输入Alistair Dreeb时,则会直接跳过第二个输入,最后name数组中的内容是Alistair,dessert数组中的内容是Dreeb。
原因是cin使用空白(空格、制表符、换行符)来确定字符串的结束位置,这就意味着cin在获取字符数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。

2、面向行的输入

istream中的类提供了面向行的类成员函数getline()和get()
这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。

getline()的使用

int main(){
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];
    cin.getline(name,ArSize);//第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数
    cin.getline(dessert,ArSize);//如第二个参数是20,函数最多读取19个字符,应为要存储空字符
    cout<<"name is "<<name;
    cout<<"dessert is"<<dessert;
    system("pause");
    return 0;
}

此时函数都可以达到预想的效果。getline()函数每次读取一行。它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符来替换换行符。

get()的使用

int main(){
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];
    cin.get(name,ArSize).get();
    cin.get(dessert,ArSize).get();
    cout<<"name is "<<name;
    cout<<"dessert is"<<dessert;
    system("pause");
    return 0;
}

这段代码的作用和getline的作用完全一样。
但是,由于get()读取字符后,换行符还在输入序列中,因此需要借助cin.get()可读取下一个字符(即使是换行符),因此可使用它来处理换行符,为读取下一行做准备。

可以理解为cin.get()的作用就是跳过一个换行符。

3、消除不良输入

int a=0;
while(!(cin>>a))
{
    cin.clear();//重置输入,如果没有这条语句,程序将拒绝继续读取输入。
    while(cin.get()!='\n')//cin.get()用来读取行尾之前的所有输入,从而删除这一行中的错误输入
        continue;
    cont<<"please enter a number:";//告诉用户,应输入一个数字
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值