当cin>>遇到空格时

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


问题描述

在使用C++的输入输出流时,如果输入两个以空格隔开的字符串,cin>>遇到空格时会结束读取,并把空格留在缓冲区,读取第二个字符串时岂不是继续读取空格直接结束?
一种说法是cin>>遇到空格会跳过
一种说法是cin>>遇到空格会结束

一、看代码

#include <iostream>
using namespace std;

int main(void)
{
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];
    cout<<"Enter your name \n";
    cin>>name;
    cout<<"Enter your favorite dessert:\n";
    cin>>dessert;
    cout<< "I have some delicious "<<dessert<<" for you "<< name;
    return 0;
}

二、结果分析

Enter your name 
abc def
Enter your favorite dessert:
I have some delicious def for you abc

在这里展示了一个问题,在读取字符串时,遇到第一个空格,“abc"被读取到name中,此时” def"被留在缓冲区,为什么下一次读取时不是直接遇到空格结束呢,反而"def"被成功读取?

三、问GPT

cin 对象在默认情况下以空白字符(包括空格、制表符和换行符)作为分隔符。这意味着当你使用 cin>> 运算符来读取数据时,它会将空白字符用于分隔输入,并将每个分隔的部分分配给相应的变量。以下是一些关于输入缓冲区的规则以及 cin >> 的行为:

  1. 分隔符规则cin 默认将空白字符(包括空格、制表符、换行符等)视为分隔符。这意味着 cin >> 会读取输入,直到遇到空白字符为止。

  2. 跳过空白字符cin >> 会跳过前导的空白字符(包括空格、制表符),并在遇到下一个空白字符时停止读取。这意味着它将空格用于分隔输入,并将每个分隔的部分分配给相应的变量。

  3. 输入缓冲区:输入缓冲区是一个存储待读取字符的临时存储区域。当你输入字符时,它们首先被存储在输入缓冲区中。cin >> 从输入缓冲区中读取字符,并根据空白字符来分隔它们。任何未读取的字符都会留在输入缓冲区中。

  4. 行缓冲:对于标准输入,通常是行缓冲的。这意味着输入通常以一行为单位读取。当用户按下回车键(换行符 ‘\n’)时,整行文本被存储在输入缓冲区中,然后 cin 会从该行中读取数据,直到遇到空白字符。

总结

可否这样理解,输入流对象在读取到空格之后将"abc"赋给第一个变量,随后的" def"适用跳过空白字符规则,并在读取到回车时,将"def"赋给第二个变量?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值