c++_计算输入的空格数和字符总数_逻辑运算符_数字的读取(输入字母或符号不接收)_简单文本文件的输入和输出(具体的去解释了cin面对不同的数据类型,到底是怎么去接收数据的)
/* 计算输入的空格数和字符总数 */
//用cin.get(char)来获取输入,如果用cin会自动忽略输入的
//#include <iostream>
//
//void main()
//{
// using namespace std;
// char ch,zero; //定义接收输入字符的变量
// int spaces = 0; //定义计算空格数的变量
// int total = 0; //定义计算字符总数的变量
// cout << "以点结尾,请输入一个字符串:";
// cin.get(ch); //假如输入的是一个句子,那么会一个字符一个字符的接收,剩余的保存在输入流中
// while (ch != '.') //判断ch是否为点,即判断是否到了一个句子的结尾,因为定义了以点为输入的结尾
// {
// if (ch == ' ') //判断如果ch等于空格
// spaces++; //计算空格数
// total++; //计算字符总数
// cin.get(ch); //刚刚少了这一句,也就无法继续去接收剩余输入流中的字符,导致程序无法执行
// }
// cout << endl<< "空格数为:" << spaces << endl;
// cout << "总的字符数为:" << total << endl;
// cin >> zero; //防止DOS闪退
//}
/* 逻辑运算符 */
/*
01)逻辑或OR(||)
02)逻辑与AND(&&) while(a && b) 如果a表达式是错误的,则c++不会再去判断b表达式是否正确
02)逻辑非NOT(!)
03)逻辑OR和逻辑AND运算符的优先级都低于关系运算符,这意味着下面的表达式将会被解释为
x >5 && x<10; 被解释为:(x >5) && (x<10);
04)!运算符的优先级高于所有的关系运算符和算术运算符,因此要对表达式取反,必须用括号括起来,即:
!(x>5); //表示对x>5这个表达式取反
!x>5; //表示先对x取反,然后判断是否大于5
*/
/* 数字的读取(输入字母或符号不接收) */
1 #include <iostream> 2 const int Max = 5; //定义常量Max 3 void main() 4 { 5 using namespace std; 6 //get data 7 int golf[Max]; 8 cout << "Please enter your golf score." << endl; 9 cout << "You must enter " << Max << " rounds" << endl; 10 for (int i = 0; i < Max; i++) 11 { 12 cout << "round #" << i + 1 << ":"; //例如第一轮显示 round #1: 后输入得分 13 while (!(cin >> golf[i])) //由于数组golf是int型数组,如果输入的是数字,cin>>golf[i]会返回true,并将该数字加入数组中 14 { //如果输入的是字母或符号,cin>>golf[i]会返回false,且不会将输入的字母或符号放入数组中 15 cin.clear(); //如果输入了字母或符号,那么cin流中就会设置一个错误标志(failbit被置1) 16 //cin.clear()就是让failbit位置为0,使cin可以正常使用 17 while (cin.get() != '\n') //假如输入的是123abc456,cin>>golf[i]会一个一个的接收,把123存入前三个位置还是没错的, 18 continue; //但是当轮到输入流中的a输入到数组时,就会执行cin.clear(),由于此时还没有执行到换行符, 19 //那么继续去判断输入流中的东西是否为数字,如果不是,那么继续去执行cin.clear(),并判断是否 20 //到了输入流中的换行符(回车),如果没有,那么继续去判断输入流中的东西是否为数字,一直循环 21 //直到遇到了换行符,那么去执行cout << "Please enter a number:"; 22 cout << "Please enter a number:"; 23 } 24 } 25 //计算平均得分 26 double total = 0.0; 27 for (int i = 0; i < Max; i++) 28 total = total + golf[i]; //将golf数组中的数字全部加起来 29 //打印结果 30 cout << "平均得分为:" << total / Max << endl; 31 }
//运行总结:假如输入123abd12,那么程序会认为输入的第一个数字是123,并且将123赋到数组中的第一个位置上
//将abd12认为是一个字母或符号,全部都忽略过去,并直接判断书最后一个就是换行符,
//即while (cin.get() != '\n')下的continue不会被执行
/* 简单文本文件的输入和输出 */ *************
/*
01)使用cin进行输入时,程序将输入是为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据类型是什么
输入一开始都是字符数据---文本数据。然后cin对象负责将文本文件转换为其他类型。
*/
#include <iostream>
void main()
{
using namespace std;
//char ch1;
//* char 如果输入38.2 19.5
//cin >> ch1; //输入行中的第一个字符被赋给ch1,在这里第一个字符是数字3,其字符编码(二进制)被存储在ch1中
//输入和目标变量都是字符,因此不需要进行转换,这里存储的是3字符3的编码
//输入队列中的下一个字符是字符8,下一个输入操作(cin)将对其进行处理
//cout << ch1; //此时只打印3
//* int 如果输入38.2 19.5
//int ch2;
//cin >> ch2; //在这时,cin将不断读取,直到遇到非数字字符,这样句点将成为输入队列中的下一个字符。
// //cin通过计算发现,这两个的字符为对应数字38,因此将38的二进制编码赋值到变量ch2中
//cout << ch2; //打印38
//* double 如果输入38.2 19.5
//double ch3;
//cin >> ch3; //在这时,cin将不断读取,直到遇到第一个不属于浮点数的字符。即cin读取3、8、句点和5,
// //使空格成为输入队列中下一个字符。cin通过计算发现,着四个字符对应输值38.5。
// //因此将38.5的二进制编码(浮点格式)复制到变量ch3中
//cout << ch3<<endl; //打印38.2
//* char数组 如果输入38.2 19.5
//char ch4[50];
//cin >> ch4; //在这时,cin将不断读取,直到遇到空白字符。即cin读取3、8、句点和5,
// //使空格成为输入队列中下一个字符。然后cin将这四个字符的字符编码存储到数组ch4中,并在末尾加上一个空字符。
// //这里不需要进行任何转换
//cout << ch4<<endl; //打印38.2
//* 另一种使用char数组来存储输入 如果输入38.2 19.5
//char ch5[50];
//cin.getline(ch5, 50); //在这时,cin将不断读取,直到遇到换行符。所有字符都被存储到数组ch5中,并在末尾加上一个空字符
// //换行符被丢弃,输入队列中的下一个字符是下一行中的第一个字符。这里不需要进行任何转换
//cout << ch5 << endl; //打印38.2 19.5
//system("pause"); //按下任意键退出DOS
}