今天主要学习Pointer和Array的相关内容,这些问题对我来说都是老生常谈了,较为感兴趣的是那个例子。
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
int inputVal;
vector<int> array;
cout << "Enter any number of integers: ";
while(cin>>inputVal){
array.push_back( inputVal );
}
for( int i = 0; i < array.size( ); i++ )
cout << array[ i ] << endl;
system("pause");
return 0;
}
这个例子用来read unlimited numbers,然后write them.
我一开始的困惑来着于这个unlimited numbers。我以为输入一堆数比如123213213123输出也是这样的123213213123。
结果发现什么都没输出。
原因很简单,while(cin>>inputVal)表示持续的读入键盘流,如果一直不加空格,是会被当成一个数的,而这么大的数显然超过了int的范围,并且溢出,无法得到正确的结果。空格在cin中的作用是对输入截断,比如
int a,b;
cin>>a>>b;
cout<<a<<" "<<b<<endl;
如果输入3 4, 得到 3 4
而如果输入34,则认为你只给a进行了赋值,所以还需要继续输入。
对于如何让这种以while(cin>>inputVal)格式的连续输入停止有很多方法
1 是直接在最后一个输入的数后面打eof然后回车
2 是在最后一个输入的数后面打ctrl+z然后回车
其实两个是一样的 ctrl+z用了模拟一个eof的信号而已,并不是真的输入的ctrl+z。
所以我们看出,空格是cin的杀手,遇到空格普通的cin>>就不好使了,那么如何用cin来接收有空格的一行字符呢?
比如:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include <iostream>( p! R% _1 g& t7 t# w
using namespace std;
void main(){
char a[20];
cin.get(a,20);
cout<<a<<endl;
system("pause");
}
输入:jkl jkl jkl/ M0 /- T4 g0 x- Z; U) `' W6 g, n! T
输出:jkl jkl jkl j9 v+ z8 u" B5 f% ^' P$ o
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'/0'), w$ z d) H W+ T4 x; b4 `, H
类似的还有 cin.getline()
#include <iostream>( p! R% _1 g& t7 t# w
using namespace std;
void main(){
char a[20];
cin.getline(a,20);
cout<<a<<endl;
system("pause");
}
两个的区别是cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中而cin.getline舍弃换行符
(具体见:http://blog.csdn.net/steven20027/archive/2010/05/27/5627292.aspx)
最后顺便回顾一下如何从txt中读取一行
我的方法是采用string类中的getline来完成。used with c++ std::string 要用C++就一起都用C++的东东
#include <fstream>
#include <string>
using namespace std;
void main(){
string s;
ifstream myfile("a.txt");
//myfile.getline(s,256);
//cout<<s<<endl;
while(getline(myfile,s)) // 读一行,自动判断换行,丢弃换行符.
cout<<s<<endl; // 输出这一行 然后继续读下一行
system("pause");
}
当然也可以用cin.getline这种C-style的来写,没试过。