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() != '
') //假如输入的是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 }
c++接收输入时输入错误的处理方法


//运行总结:假如输入123abd12,那么程序会认为输入的第一个数字是123,并且将123赋到数组中的第一个位置上
//将abd12认为是一个字母或符号,全部都忽略过去,并直接判断书最后一个就是换行符,
//即while (cin.get() != ' ')下的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
}