C++primerplus书摘1(第一到第四章)
1.getline() get()
下列程序输入输出为
3
3
cin不会丢弃换行符,会把换行符留在输入队列中,所以getline遇到换行符会把换行符替换成'\0',
所以s是空串。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 string s; 9 char a; 10 cin>>a; 11 cout<<a<<endl; 12 getline(cin,s);cout<<s; 13 return 0;//3 3 14 }
可以看到第二个getline前没有接受来自第一个getline后的换行符,仍可以正常正常输出,说明第一个getline丢弃了后面的换行符。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 string s; 9 char a; 10 cin>>a; 11 cout<<a<<endl; 12 cin.get(a);//接受a后面的换行符 13 getline(cin,s); 14 getline(cin,s); 15 cout<<s; 16 return 0; 17 }
输入输出:
3
3
y
u
u
o
o
cin.get()不会丢弃换行符,而是将换行符保留着输入队列
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 string s; 9 char a; 10 cin>>a; 11 cout<<a<<endl; 12 cin.get(a);//吃掉cin后面的换行符 13 getline(cin,s);//输入s,丢掉最后面的黄海峰 14 cin.get(a);//接受一个新的字符 15 cout<<a<<endl; 16 cin.get(a); 17 cout<<a<<endl; 18 getline(cin,s); 19 cout<<s; 20 return 0; 21 }
结论:
1.getline(cin,s); /cin.getline();读取换行符,并将换行符替换成'\0'并丢弃换行符
2.cin 会把换行符留在输入队列中
3.cin.get(); 读取换行符并替换成'\0',并不会主动丢弃换行符,会把它保留在输入队列中
2.当且仅当数值不会为负时,才应使用无符号类型。unsigned
3.整数后面l/L表示long类型,u/U表示unsigned int常量,ul表示unsigned long常量。
4.const限定符 限定了声明的含义
如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。
const比#define好,1.它能够明确指定类型 2.可以使用C++的作用域规则将定义限制在特定的函数或文件中。