在while中使用cin>>a 为条件及注意事项说明

 更新时间:2022年07月25日 17:16:08   作者:_ dingding_  
这篇文章主要介绍了在while中使用cin>>a 为条件及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在while中使用cin>>a 为条件

用一个题目来解释

本题为统计输入多少个连续数字

#include<iostream>
using namespace std;
int main()
{
	int currVal = 0 , val = 0;
	if(cin >> currVal)
	{
		int cnt=1;//统计次数
		while(cin >> val)
		{
			if(currVal == val)
			{
				cnt++;
			}
			else{
				cout << currVal <<" occurs "<<cnt<<" times "<<endl;
				currVal = val;
				cnt=1;//重新计算另一个 
			}
		} //while循环结束 
		cout << currVal <<" occurs "<<cnt<<" times "<<endl;//打印最后一个数 
	}//if循环结束 
	return 0;
}

有一个要注意的地方,以前不理解在while里面用cin >> val是什么意思,用这个当条件的话,通过检测其流的状态来判断结束;

(1)若流是有效的,即流未遇到错误,那么检测成功;

(2)若遇到文件结束符,或遇到一个无效的输入时(例如本题输入的值不是一个整数),istream对象的状态会变为无效,条件就为假;

怎样才是文件结束符呢?

不同的操作系统有不同的约定,在windows系统中,输入文件结束符的方法是先按Ctrl+Z,然后再按Enter;在UNIX系统中,包括Mac OS X系统中,文件结束输入为Ctrl+D;

下面是两个输入实例图片,请对比

1.这个直接按enter,最后一个4显然没有输入进去,程序读不到最后一个数,程序一直保持输入的状态;

2.这个是正确实例,上面的Z是按了ctrl的效果

while(cin>>a) cin输入直到回车结束

经常遇到循环输入,直到符合某种条件时结束输入。

cin>>s是有返回值的,只要s满足类型条件,就会return true,一直执行下去,而cin会忽略空格或者enter,因此,enter后不会结束循环。只能ctrl+Z。

其实很简单

通过get()判断下一个输入是不是回车就行。

while(cin>>a){
    ...
    if(cin.get()=='\n') break;
} 

举个例子

#include <bits/stdc++.h>
using namespace std;
 
int b[10];
int main() 
{
	int i=0,a;
	while(cin>>a){
		b[i++]=a;
    	if(cin.get()=='\n') break;	
	} 
	for(i=0;i<10;i++) cout<<b[i]<<" ";
}

这里再以创建链表举一个例子

#include <bits/stdc++.h>
using namespace std;
struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
	
};
 
int main()
{
	ListNode* head1 = new ListNode(NULL);
	ListNode* head = new ListNode(NULL);
	head1 = head;
	int a;
	while (cin >> a) {
		ListNode* tmp = new ListNode(a);
		head->next = tmp;
		head = tmp;
		if (cin.get() == '\n') break;
	}
	while (head1->next != NULL) {
		cout << head1->next->val<<endl;
		head1 = head1->next;
	}
	system("pause");
	return 0;
}

运行结果:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++高性能服务器框架之线程模块

    C++高性能服务器框架之线程模块

    该模块基于pthread实现,sylar说,由于c++11中的thread也是由pthread封装实现的,并且没有提供读写互斥量,读写锁,自旋锁等,所以自己封装了pthread,本文主要详细介绍了C++高性能服务器框架中的线程模块,需要的朋友可以参考下
    2023-06-06
  • QT树的具体项目实现

    QT树的具体项目实现

    本文主要介绍了QT树的具体项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C++类的分离式写法介绍示例

    C++类的分离式写法介绍示例

    今天小编就为大家分享一篇关于C++类的分离式写法介绍示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C语言静态版通讯录的设计与实现

    C语言静态版通讯录的设计与实现

    静态版通讯录是一种简单的通讯录实现方式,通过定义固定的数组大小来存储联系人信息。该方法不支持动态增删联系人,但具有实现简单、易于理解的优点。在程序设计中,需注意数组边界溢出等问题
    2023-04-04
  • C++实现LeetCode(103.二叉树的之字形层序遍历)

    C++实现LeetCode(103.二叉树的之字形层序遍历)

    这篇文章主要介绍了C++实现LeetCode(103.二叉树的之字形层序遍历),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C指针原理教程之C指针基础

    C指针原理教程之C指针基础

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。
    2019-02-02
  • C语言实现加密解密功能

    C语言实现加密解密功能

    这篇文章主要为大家详细介绍了C语言实现加密解密功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++计算任意两个日期天数差的方法详解

    C++计算任意两个日期天数差的方法详解

    这篇文章主要为大家详细介绍了如何利用C++实现任意两个日期天数差,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-02-02
  • C语言通过三步翻转法实现单词倒置详解

    C语言通过三步翻转法实现单词倒置详解

    这篇文章主要为大家分享了用三步翻转法将一句话的单词进行倒置的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05
  • C++实现简单迷宫游戏

    C++实现简单迷宫游戏

    这篇文章主要为大家详细介绍了C++实现简单迷宫游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01

最新评论