cin.get()与cin.getline()的使用练习一题——平均绩点

这篇具有很好参考价值的文章主要介绍了cin.get()与cin.getline()的使用练习一题——平均绩点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、前言

通过本练习进一步熟悉cin.get()与cin.getline()两种输入方式的各自的特点及其区别。

二、题目与测试数据

题目描述

每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。

输入

有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。

输出

每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。

样例输入

A B C D F
B F F C C A
D C E F

样例输出

2.00
1.83
Unknown

三、参考代码

1. 参考实现代码一

这里使用cin.get()来获取所有输入的字符,然后进行逐一甄别判断。注意代码中flag标记的作用。代码如下

#include<iostream>
#include<iomanip>
using namespace std;

int main() {
	char ch;
	int c=0, sum=0, flag=0;
	do {
	    ch = cin.get();
		//cout.put(ch);
		switch(ch) {
			case ' ': break;
			case 'A': {sum += 4; c++; break;}
			case 'B': {sum += 3; c++; break;} 
			case 'C': {sum += 2; c++; break;}
			case 'D': {sum += 1; c++; break;}
			case 'F': {sum += 0; c++; break;}
			case EOF:
			case '\n': {
				if(!flag) {
				    if(c!=0) cout << fixed << setprecision(2) << (1.0*sum/c) << endl;
				}
				else {
					cout << "Unknown" << endl;
				}
				c=0;
				sum=0;
				flag=0;
				break;
			}
			default: flag=1; // ch is not in{'A','B','C','D','F','\n'}
		}
	} while(ch != EOF);
	return 0;
}

思考,上面的代码中,语句

				if(!flag) {
				    if(c!=0) cout << fixed << setprecision(2) << (1.0*sum/c) << endl;
				}
				else {
					cout << "Unknown" << endl;
				}

能否写成下面的形式?

				if(!flag && c!=0) {
				    cout << fixed << setprecision(2) << (1.0*sum/c) << endl;
				}
				else {
					cout << "Unknown" << endl;
				}

2. 参考实现代码二

这里使用cin.getline()来获取所有输入的字符,getline()属于cin类的成员方法,getline()可以一直读取输入直到遇到换行符(即读取一行),同时它会丢弃换行符换成’\0’。同样注意代码中flag标记的作用。代码如下文章来源地址https://www.toymoban.com/news/detail-819016.html

#include<iostream>
#include<iomanip>
using namespace std;

//getline属于cin类的成员方法,他可以一直读取输入直到遇到换行符,同时它会丢弃换行符换成’\0’。
int main() {
	char chs[80];
	short c, sum, flag;
	while (cin.getline(chs, 80)) {
		c=0;
		sum=0;
		flag=0;
		for(int i=0; chs[i]!='\0'; i++) {
			if(chs[i]==' ') continue;
			if(chs[i]!='A' && chs[i]!='B' && chs[i]!='C' && chs[i]!='D' && chs[i]!='F') {
				cout << "Unknown" << endl;
				flag=1;
				break;
			}
			switch(chs[i]) {
				case ' ': break;
				case 'A': {sum += 4; c++; break;}
				case 'B': {sum += 3; c++; break;} 
				case 'C': {sum += 2; c++; break;}
				case 'D': {sum += 1; c++; break;}
				case 'F': {sum += 0; c++; break;}
			}
		}
		if(!flag) {
			//cout << c << endl;
			//cout << sum << endl;
			//printf("%.2f\n", 1.0*sum/c);
			cout << fixed << setprecision(2) << (1.0*sum/c) << endl;
		}
	}
	return 0;
}

到了这里,关于cin.get()与cin.getline()的使用练习一题——平均绩点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • getline的使用详解

    getline函数与字符串所需要的头文件相同,需要在头文件#includestring中调用getline函数。 getline是C++标准库函数;它有两种形式,一种是头文件 istream 中输入流成员函数;一种在头文件 string 中普通函数; 它遇到以下情况发生会导致生成的本字符串结束: (1)到文件结束,(2)遇到函

    2024年01月18日
    浏览(38)
  • Python---练习:求某同学成绩的总分及平均分

    需求: 已知某同学的语文(70)、数学(90) 、英语(80)、历史(75)、地理(85)五门课的成绩,编程求该同学的总分以及平均分。 思考: 要求是算总分和平均分,先看总分,已经知道了各科成绩,那么可以用把成绩赋值给每个学科的变量名,比如 chinese math english history geography,  几个变

    2024年04月17日
    浏览(45)
  • PTA PYthon 7-5 计算绩点

    学分绩点计算办法: 1、按成绩折算课程绩点: 90分 - 100分 折合4.0 - 5.0绩点,即90分折合4.0,91分折合4.1,依次类推 80分 - 89分 折合3.0 - 3.9绩点,即80分折合3.0,81分折合3.1,依次类推 70分 - 79分 折合2.0 - 2.9绩点,即70分折合2.0,71分折合2.1,依次类推 60分 - 69分 折合1.0 - 1.9绩点

    2024年02月04日
    浏览(65)
  • 绩点计算 - C/C++ 语法基础

    某大学的GPA(绩点)计算规则如下: 课程百分制成绩90分对应绩点4.0,超过90分的,按90分计;如不足90分,则课程绩点 = 4.0 * 分数/90。 学生综合绩点按该生已修的各门课程绩点结合学分加权平均而得。 现有步步同学入学后的已修课程(共5门)成绩表如下,请编程计算其GPA。 输

    2024年02月09日
    浏览(82)
  • new;getline();重载<<和>>

    面向对象程序设计的优点: 易维护 易扩展 模块化:通过设置访问级别,限制别人对自己的访问,保护了数据安全 int main(){ return 0;} 返回值0在windows下编程一般没用,但是在 linux 中编程,返回值有时有用 生成目标文件的过程叫“ 汇编 ” 源语言是汇编语言,目标语言是机器语

    2024年03月10日
    浏览(48)
  • c++ getline()详解

    前言 getline()函数在c++中有两种用法,第一种定义在 i s t r e a m istream i s t r e a m 头文件中,第二种定义在 s t r i n g string s t r i n g 头文件中。getline()在这两种用法中都是用于读入一行字符串,可以带空格等特殊字符,在第二种用法中getline的第一个参数传的是 流 ,比如:cin和

    2024年02月03日
    浏览(37)
  • std::cin C++标准输入流

    用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又

    2024年02月08日
    浏览(62)
  • C++ | cout与cin << >> endl 是什么意思

    C++的输入输出 使用C++输入输出更方便,不需要向printf、scanf输入输出时,那样需要手动控制格式 C++的输入输出是可以自动识别变量类型的。 cout和cin是全局的流对象 endl是特殊的C++符号,表示换行输出 他们都包含在头文件iostream头文件中 cout与cin的含义 Cout标准输出对象,是

    2024年01月25日
    浏览(37)
  • VScode自动滚屏cin、input输入问题解决方法

    VScode 是一个轻量的文本编辑器,微软出品。很多人把它作为主要开发工具写代码,因为它几乎是万能的,想要什么功能就装什么插件,可以适用于几乎任何编程语言。同时有很多主题可选,颜值较高。在笔者的使用中以下二个问题较为常见,也是非常影响使用体验的问题。一

    2024年02月04日
    浏览(43)
  • C++:ifstream通过getline读取文件会忽略最后一行空行

    getline是读取文件的常用函数,虽然使用简单,但是有一个较容易被忽视的问题,就是文件最后一行空行会被忽略。  假设文件abc.txt内容为 123 456 789 最后没有空行 运行程序输出: 1{123} 2{456} 3{789}  可以看到读到了3行完整的内容  假设文件abc.txt内容为 123 456 789 最后有一行空行

    2024年01月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包