在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;
}
运行结果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。