• 字符数组中的cin与cout


     1 #include<iostream>
     2 #include<stdlib.h>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     char str[]="Welcome to C++ world !";  //创建一个字符数组,并初始化
     9     cout<<str<<endl; //输出字符串
    10     cout<<"请输入新的字符串:"<<endl;
    11     cin>>str;
    12     cout<<str<<endl;
    13 
    14     system("pause");
    15 }

    注:代码第3行   using namespace std;为名称空间编译指令

    1、所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
    2、C++标准程序库中的所有标识符都被定义于一个名为std的namespace中
    3、在标准C++以前,都是用#include<iostream.h>这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C++引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用一套新的头文件,这套头文件的文件名后不加.h扩展名,如iostream、string等等,并且把原来C标准库的头文件也重新命名,如原来的string.h就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包含的写法也就变成了#include <iostream>。
    4、因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

    #include <iostream.h>
             using namespace std; 则出错
    所以 要么写成
    #include <iostream >
    using namespace std;
    要么写成
    #include <iostream.h>

    疑问:代码第11行,输入的Hello everyone并没有超出为字符串数组str初始化的空间,为什么输出结果只是Hello

    原因是:用cin>>进行输入操作时,跳过前导空白,从第一个有效字符起,向对应的字符数组依次存入字符,直到遇到一个空白字符才结识,这便完成了一个字符串的输入

    那么,如何将含空格的字符串读到C风格字符串呢????——————使用get()与getline()函数

    这两个函数都用于读入一行输入,直到遇到换行符,不同之处在于:getline()丢弃换行符,而get()会同时将换行符读入C风格的字符串中。

    如:

    #include<iostream>
    #include<stdlib.h>
    
    using namespace std;
    
    int main()
    {
        char name[16];
        char school[50];
        cout<<"请输入您的姓名:"<<endl;
        cin.get(name,16);
    
        cin.get();  //从输入流中读出换行符
    
        cout<<"请输入您的学校:"<<endl;
        cin.getline(school,50);
        cout<<"您的姓名是:"<<name<<endl;
        cout<<"您的学校是:"<<school<<endl;
    
        system("pause");
    }

    注:语句"cin.get()"的作用是从输入队列中提取一个字符,即将语句"cin.get(name,16)"遗留在输入队列中的换行符提取出来,否则,若没有语句"cin.get()",在执行语句

    "cin.getline(school,50)"时,输入队列中的第一个字符就是一个换行符,,从而,getline()函数会认为已经到达末尾,没有任何可以读取的内容,因此,school将会是只有一个''的空字符串。

    从上面的理解,可以看出:

    语句:

            cin.get(数组名,大小);

            cin.get();

    与语句:

            cin.getline(数组名,大小);

    两者是等价的。

  • 相关阅读:
    Headless MSBuild Support for SSDT (*.sqlproj) Projects
    dbDacFx Provider for Incremental Database publishing
    Cannot spawn... TortoisePlink
    Windows server 2012同时进行多个会话登陆的策略设置
    Workspace Cloning / Sharing in Jenkins
    How to change Jenkins default folder on Windows?
    使用Jenkins配置自动化构建
    Auto push git tag
    Azure Deploy
    sql server中index的REBUILD和REORGANIZE
  • 原文地址:https://www.cnblogs.com/kkdd-2013/p/3315635.html
Copyright © 2020-2023  润新知