会飞的鱼

2020
Godam
首页 » 学习笔记 » C++ primer plus Day03

C++ primer plus Day03

第5章 循环和关系表达式

P152 循环和文本输入

使用原始的cin进行输入

直接上代码示例:

#include<iostream>
using namespace std;

int main() {
    char ch;
    int count = 0;
    cout << "请输入字符以#结束:" << endl;
    cin >> ch;
    while (ch != '#') {
        cout << ch;
        ++count;
        cin >> ch;
    }
    cout << endl << count << "个字母读入\n";
    return 0;
}

这段代码随便输入了几个运行结果如下:
cin 判断输入
程序在循环之前就读取了第一个字符,这样循环可以测试第一个字符。注意这很重要,因为第一个字符可能就是#,在这种情况下可以跳过整个循环。在使用cin时将会主动忽略在输入时的空格和换行符,在输入过程中发送给cin的输入被缓冲,这意味着只有在用户按下回车键后输入的内容才会被发送给程序。

使用cin.get(char)进行补救

使用cin.get()函数可以补救直接使用cin的部分不足:

#include<iostream>
using namespace std;

int main() {
    char ch;
    int count = 0;
    cout << "请输入字符以#结束:" << endl;
    cin.get(ch);
    while (ch != '#') {
        cout << ch;
        ++count;
        cin.get(ch);
    }
    cout << endl << count << "个字母读入\n";
    return 0;
}

运行结果如下:
cin.get()运行结果

文件尾条件

检测文件尾EOF,Win环境下可以通过按Ctrl+Z和Enter来模拟文件尾条件(不同系统可能会不一样)。检测到EOF后,cin会将两位(eofbit和failbit)都设置为1,可以通过成员函数eof()来查看。若检测到EOF,则cin.eof()将返回bool值true。同样,若eofbit和failbit被设置为1,则fail()成员函数将返回true,反之false。由于eof()和fail()均报告读取后的结果,所以应将二者放在读取后。

#include<iostream>
using namespace std;

int main() {
    char ch;
    int count = 0;
    cout << "请输入字符以#结束:" << endl;
    cin.get(ch);
    while (cin.fail()==false) {
        cout << ch;
        ++count;
        cin.get(ch);
    }
    cout << endl << count << "个字母读入\n";
    return 0;
}
  • 注意在使用EOF标记后,cin将不再读取输入,这对于文件来说是很合理的因为一个文件的尾之后一定不会再有内容了,但在输入的过程中可能会还有,这时可以在之后使用cin.clear()清除EOF标记,使输入继续进行。
  • cin.get(char)的返回值是一个cin对象,但是在需要其发生转换的地方时会自动转换为bool类型(如在while循环中):while(cin)

文件尾EOF其实相当于-1,如果使用cin.get()(没有参数)并测试EOF,则必须将返回值赋给int型变量,而不是char,之后再将其强制转换为char类型:

#include<iostream>
using namespace std;

int main() {
    int ch;
    int count = 0;
    cout << "请输入字符以:" << endl;
    while ((ch = cin.get())!=EOF) {
        cout.put(char(ch));
        ++count;
    }
    cout << endl << count << "个字母读入\n";
    return 0;
}

第6章 分支语句和逻辑运算符

P177 字符函数库cctype

在这个函数库中,有判断是否为字母、数字、标点符号的函数。如:若ch是一个字母,则isalpha(ch)函数将返回一个非零值,否则返回0.类似的还有很多。

P195 读取文本文件

  • is_open()函数可以判断文件是否被打开,成功打开将返回true。

    文件尾的判断

    eof()只能判断是否达到EOF,而fail()可以用于检测EOF和类型不匹配,请看下面代码段:
    if (inFile.eof())
          cout << "文件已经结束";
      else if (inFile.fail())
          cout << "读取数据不正确";
      else
          cout << "未知错误";
    
    这样就可以对不同的错误进行处理。P197页有关于good()的描述。

    第7章 函数 C++的编程模块

    使用交替乘除可防止中间操作数超过最大浮点数。

    一则关于函数以数组为参的注意

    请看如下代码:
    ```

    includeusing namespace std;

int test(int a[]) {
int c = sizeof(a);
return c;

int main() {
int a3 = { 1,2,3 };
int b = test(a);
cout << sizeof(a)<<endl;
cout << b;
}
```
这段代码输出如下所示:
数组注意事项

数组的区间处理

在理解了数组以指针传递的特性后,仍以上述示例为前提可以采用如下方式对数组进行分段处理:sum (a,a+3);然后在sum函数内部利用指针的运算进行操作。

const的说明

const int * a = &b指向的内容不可变,但指针指向可以变化
int *const a = &bb内容可以边,但指针指向b这一内容不可变化

文章如无特别注明均为原创! 作者: 果果, 转载或复制请以 超链接形式 并注明出处 GODAM|博客|godam
原文地址《 C++ primer plus Day03》发布于2020-6-11

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

sitemap