首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这个"while(cin.get(str,3))“只运行一次?

这个问题涉及到C++语言中的输入流(cin)和字符串处理。首先,让我们来解释一下这段代码的含义:

代码语言:txt
复制
while(cin.get(str,3))

这行代码的作用是从标准输入流(cin)中读取字符,并将其存储到名为"str"的字符数组中,最多读取3个字符。这个代码片段使用了C++的输入流函数get(),它会读取指定数量的字符,并将其存储到目标数组中,直到满足以下条件之一:

  1. 读取到指定数量的字符。
  2. 读取到换行符('\n')。
  3. 到达文件末尾。

现在我们来解释为什么这个代码只运行一次。假设我们输入了一个长度为5的字符串"Hello",那么cin.get(str,3)将会读取前3个字符"Hel"并存储到"str"中。然而,输入流中还剩下2个字符"lo",这些字符并没有被读取。由于cin.get()函数的返回值是输入流对象本身,而不是读取的字符数,所以这个循环条件仍然为真,循环会继续执行。但是,由于输入流中没有足够的字符来满足读取条件,cin.get()函数将返回false,导致循环终止。

因此,这个代码只会运行一次,因为在第一次循环迭代后,输入流中的字符已经被读取完毕,无法再满足循环条件。

这段代码的应用场景可能是需要从输入流中读取固定长度的字符,例如读取密码或者验证码等。在这种情况下,我们可以使用类似的代码来限制输入的长度,以确保输入的安全性和正确性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送):https://cloud.tencent.com/product/umeng
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

EasyC++06-char类型和输入输出优化

这个属于标准的奇淫技巧,不推荐使用。...char c; cin.get(c); cout.put(c); 输入输出中文 关于这一段我犹豫了很久要不要加,因为实在是没有相关经验,毕竟之前刷题了。...比如下列代码,是可以完美运行的: string str; cin >> str; cout << str << endl; cout << str.length() << endl; 只是为什么最后输出的长度是...在Mac当中默认使用utf-8编码,一个汉字的长度是3个字节。C++当中的字符串计算长度的时候统计的是字节的数量,所以两个汉字的长度是6。...如果我们是在源代码当中写入了中文,比如: string str = "中文"; cout << str << endl; 这就可能一些问题,最常见的问题就是代码存储环境和运行环境的默认编码不同,比如IDE

55210
  • C++ Primer Plus习题及答案-第十七章

    为什么键入数字(如121)作为输入要求程序进行转换? 键盘输入会生成一系列字符,输入121将会生成3个字符,每个字符都由一个字节的二进制码表示。...要将这个值存储为int类型,则必须将这3个字符转换为121值的二进制表示。 3. 标准输出与标准错误之间有什么区别? 默认情况下两者都将输出发给标准输出设备(通常为显示器)。...而cin.get(ch);不忽略空格和换行符,且第一次输入的回车键,也会被cin.get(ch);捕捉到,因此ct2的值应为9。打印内容如下: ct1 = 5; ct2 = 9 9....while (cin.get() !...这样,程序将把所需的数据保存到文件中。 比较难处理的部分是使用文件恢复数据。

    3.1K30

    C++中cin的详细用法

    代码编译运行环境:VS2012+Win32+Debug。 ---- 1.cin简介 cin是C++编程语言中的标准输入流对象,即istream类的对象。...当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!...就出现了如上情况,将换行符读入变量b,输出时换行两次,一次是变量b,一次是endl。...---- 4. cin清空输入缓冲区 从上文中可以看出,上一次的输入操作很有可能是输入缓冲区中残留数据,影响下一次的输入。那么如何解决这个问题呢?...:1234str2:success 注意: (1)程序中使用cin.ignore清空了输入缓冲区的当前行,使上次的输入残留下的数据没有影响到下一次的输入,这就是ignore()函数的主要作用。

    7.2K30

    C++ STL学习之【string的模拟实现】

    定义能全局使用的 npos 值(public) npos 需要设置为公开,否则类外就无法使用了 注意: npos 类型为 static const size_t static 修饰后,npos 只能被初始化一次...(_str, str); } 注意: 为了确保程序的正确性,在初始化列表中初始化 大小,再将 大小 赋值给 容量,避免出现赋值为随机值的情况(初始化列表初始化顺序与类中的声明顺序有关) 开辟空间时,..._capacity; } return *this; //需要返回,避免 a = b = c 连续赋值情况 } ---- 3、访问数据 string 离不开数据访问函数,如同顺序表一样,可以直接通过...); //挪动 size_t end = size() + len; while (end > pos) { _str[end] = _str[end - len]; end--;...} //衔接 strncpy(_str + pos, str, len); //注意:拷贝 len 个 return *this; } strncpy 拷贝 len 个字符,避免将字符串 str

    12510

    C++ 练气期之细聊字符串

    char myStr[5]= {'H','E','L','L','O'}; cout<<myStr<<endl; 为什么会输出更多信息?...在连续使用 cin.get有可能出现问题,如下代码: char str[20]; char str_[20]; //第一次输入 cin.get(str,10); cout<<str<<endl; //第二次输入...原因是第一次接受用户输入后,cin.get缓存了用户输入的换行符。在第二次接受用户输入时,cin会首先检查缓存器中是否有数据,发现有换行符,直接结束输入。 解决方案,手动清除缓存器的数据。...char str[20]; char str_[20]; cin.get(str,10); cout<<str<<endl; //不带参数的 get 方法可以清除数据 cin.get(); cin.get...如下代码: char str[20]; char str_[20]; //第一次输入 cin.getline(str,10); cout<<"str:"<<str<<endl; //第二次输入 cin.getline

    1.3K20

    C++ 数据结构和算法入门笔记

    C++对象的第一次使用,这个对象就是cout cout是输出流对象,是 console out (控制台输出)的缩写,属于 basic_ostream 类的对象,而 ostream 类在中定义。...(cin >> i) { sum += i; while( cin.peek() == ' ' ) { cin.get()...,一次从输入流对象中提取一个整数,当用户键盘输入时,对应字符将输入到操作系统的键盘缓存区中。...while(cin >> i)中,表达式返回输入流本身,但如果到了文件尾或非法值,则返回 false 。 比如,在上面例子中,如果在程序运行时输入的是小数点,则会发生内部错误,返回0。...然后就是 c++ ,不过这个例子则输出文件内容,而不是复制 运用的是 读取类 ifstream #include #include using namespace

    1.5K20

    get, getline, gets, getchar 用法「建议收藏」

    这个我还不知道怎么用,知道的前辈请赐教;')   用法3cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.   ...这个我还不知道怎么用,知道的前辈请赐教; 3、cin.getline()   3、cin.getline() // 接受一个字符串,可以接收空格并输出   #include ...请输入第2个字符串:   kskr2   请输入第3个字符串:   kskr3   输出m[0]的值:kskr1   输出m[1]的值:kskr2   输出m[2]的值:kskr3',所以看到4个字符输出...;   getline(cin,str);   cout<<str<<endl;   }   输入:jkljkljkl   输出:jkljkljkl   输入:jkl jfksldfj jklsjfl...()的用法很类似,只不过cin.getline()多一个参数罢了;   这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格

    55320

    C++cin,cout以及常见函数总结,cin,cout格式化控制

    那么,为什么单靠一个cin>>变量名称,即可确定数据类型并读取数据,这其中的奥秘被隐藏在这个>>运算符之中,这个运算符叫做流提取符,其实cin>>的原型是cin.operator >>(),这又是一种被称为运算符重载的新技术...int a;  while (cin >> a)  {   cout << "有效  ";  }  运行结果:          当使用一个istream的对象作为条件时,效果是检查流的状态。...3.cin.get():  cin.get()有多种重载形式,就常用的来介绍: 第一种:接收一个字符  char a; a = cin.get(); // 或者写成cin.get(a); 都是可以的 ...3.cout.width():  可以控制输出字符域宽度,且不足用空格填充,并且默认的方式是右对齐,width只会影响设置后的下一次输入,当二次输入时,width()失效,恢复默认方式。   ...char a;  cin.get(a);  cout.width(3);  cout << a;  4.cout.fill():  该函数可以用来改变填充的字符,并且设置以后一直生效,这一点和width

    1.3K10

    C++cin,cout以及常见函数总结,cin,cout格式化控制

    那么,为什么单靠一个cin>>变量名称,即可确定数据类型并读取数据,这其中的奥秘被隐藏在这个>>运算符之中,这个运算符叫做流提取符,其实cin>>的原型是cin.operator >>(),这又是一种被称为运算符重载的新技术...int a; while (cin >> a) { cout << "有效 "; } 运行结果: ?        当使用一个istream的对象作为条件时,效果是检查流的状态。...3.cin.get(): cin.get()有多种重载形式,就常用的来介绍: 第一种:接收一个字符 char a; a = cin.get(); // 或者写成cin.get(a); 都是可以的 第二种...3.cout.width(): 可以控制输出字符域宽度,且不足用空格填充,并且默认的方式是右对齐,width只会影响设置后的下一次输入,当二次输入时,width()失效,恢复默认方式。...char a; cin.get(a); cout.width(3); cout << a; 4.cout.fill(): 该函数可以用来改变填充的字符,并且设置以后一直生效,这一点和width不同

    1.6K60

    C++之模拟实现string

    _capacity; strcpy(_str, s._str); } 2.现代写法 找一个中间对象,让这个中间对象用参数的值进行直接构造,再将这个中间对象的内容与自己的内容进行交换。..._size(0), _capacity(0) { string temp(s); swap(temp); } 此处的swap用的是string自己实现的swap,为什么不用库里的...(), str); _size += len; } 3.运算符重载+= 1.尾插字符 尾插一个字符(复用尾插) string& operator+=(char c) { push_back...((*this) == s); } 八、String operations 1.find 1.找字符 找一个字符第一次在字符串中出现的下标 // 返回c在string中第一次出现的位置(下标)...static size_t npos = -1;//只有这个特例可以这样定义,其他static数据成员都要在类内声明,在类外定义。

    26940
    领券