统计同成绩学生人数

统计同成绩学生人数

cin>>n;
while(n!=0){
	cin>>n;
} 

改成

while(cin>>n){
	if(n==0) break;
}

while (scanf ("%d",&n) != EOF && n != 0)

==while (cin>>n && n != 0)==

解释

cin cout 返回值的解释
1.cin和cout是iostream类的2个对象,而对象是无所谓返回值的.有返回值的是<<还有>>这2个操作符.由于我们知道,操作符其实也就是函数(在操作符重载的时候可以清晰的认识到).而>>操作符返回的是它的左操作数(left-operand).对于cin>>value;返回左操作数就是操作的流的引用,也就是istream&.

2.但是好像还是不对,因为while里面判断的是bool值,难道还能判断istream&吗?

打开头文件,找到类模板basic_istream的定义,摘出这么两个语来:

 typedef basic_istream<_E, _Tr> _Myt;

   _Myt& operator>>(......) ......

这说明cin >>的返回值类型就是basic_istream&,可是放到while()中情况又该是怎样的。while()中要求是布尔表达式,难不成basic_istream&类型可以转换成bool类型?继续查看头文件,发现所有的operator重载函数都是<<和>>,没有找到用于类型转换的操作那就只好追溯到父类basic_ios了。

打开头文件<IOS.H>,找到ios的定义,其中有这么一条语句,类型转换函数的定义:

 operator void *() const { 
 	if(state&(badbit|failbit) ) return 0; 
 	return (void this; 
 }

有这个函数的定义之后,编译器会在需要的情况下将ios类型自动转换为void类型。因此,在表达式while (cin >> m >> n)中,括号中的表达式为了匹配bool类型将自动转换为void类型。如果读入时发生错误返回0,否则返回cin的地址。

#include<iostream>
#include<vector>

using namespace std;
int main(){
	int n;
	int grade;
	int res;
	while(cin>>n){
		if(n==0) break;
		vector<int> a(101,0);
		for(int i =0;i<n;i++){
			cin>>grade;
			a[grade]++;
		}
		cin>>res;
		cout<<a[res]<<endl;
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最佳损友1020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值