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;为名称空间编译指令
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(数组名,大小);
两者是等价的。