研一寒假00__char_cin输入时的问题_数组&&字符串
#-------------------char----------------#
#include<iostream>
/*使用键盘输入字符时,cin将键盘输入的M转换为77,输出时,cout将77转换为M;另外c++对字符只用单引号,对字符串使用双引号 */
int main()
{
using namespace std;
char ch='M'; //'M'表示字符M的数值编码,此句就是将77赋值给ch
int i=ch; //i=77
cout<<"The ASCII code for "<<ch<<"is"<<i<<endl; //显示The ASCII code for M is 77
cout<<"Add one to the character code:"<<endl;
ch=ch+1; //将M的数值编码加1 此时为N的数值编码
i=ch; //将N的数值编码赋值给i
cout<<"The ASCII code for "<<ch<<"is"<<i<<endl; //显示The ASCII code for N is 78
cout<<"Displaying char ch using cout.put(ch):";
cout.put(ch);
cout.put('!'); //注意以上三句显示,都没有换行,所以显示为Displaying char ch using cout.put(ch):N!
cout<<endl<<Done<<endl;
return 0;
}
#----------------------------float-------------------------------#
#include<iostream>
int main()
{
using namespace std;
cout.setf(ios_base::fixed,ios_base::floatfield);//cout显示的时候通常会删除小数点后的0,加上cout.setf()方法即可覆盖这种行为
//ios_base::fixed和ios_base::floatfield是通过包含iostream来提供的常量
float tub=10.0/3.0; //float能确保7为有效数字
double mint=10.0/3.0; //double能确保16位有效数字
const float million=1.0e6;
cout<<"tub = "<<tub;
cout<<",a million tubs ="<<million*tub<<endl; //显示tub =3.333333,a million tubs =3333333.250000 乘以1百万之后,25就是随机的数字了
cout<<"mint = "<<mint;
cout<<",a million mints = "<<million*mints<<endl; //显示mint = 3.333333,a million mints = 3333333.333333
//由于cout能显示6位小数,所以在没有乘一百万之前,tub和mint显示都是一样的,但是乘上一百万之后二者显示的就不一样了
return 0;
}
#---------------------------cin输入时的问题-----------------------------#
#include <iostream>
int main()
{
using namespace std;
const int ArrySize=20; //定义一个常量,不可被更改,相当于#define ArrySize 20
char name[ArrySize]; //定义名字数组
char dessert[ArrySize]; //定义甜点数组
cout<<"Enter your name:\n";
cin>>name; //输入名字到name数组中
cout<<"Enter your favorite dessert:\n";
cin<<dessert; //输入甜点到dessert数组中
cout<<"I have some delicious "<<dessert;
cout<<" for you, "<<name<<endl;
return 0;
}
/* 由于cin以使用空白(空格 制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入的时候只能读取一个单词
因此假如输入的名字为 Alistaire Dreeb 那么cin吧Alistaire当作第一个字符串,并保存在name数组中,把Dreeb放入输入队列中,等待
下一个cin自动将Dreeb保存在数组dessert中,因此上面的程序只输入一次,程序便可以执行完毕 */
/* 解决方法:每次读取一行输入get()和getline()方法 */
//getline()方法,有两个参数,第一个是输入的字符串保存的数组名,第二个是要读取的字符数,如果第二个参数为20,那么函数最多读取19个字符
//getline()方法以回车键作为换行符来确定输入结束,但不保存换行符,而是以空字符\0来替代换行符
cin.getline(name,20);//将输入的字符保存到name数组中,最多读取19个字符,以回车键作为输入的结束
//get()方法,可以带参数,也可以不带,带参数时候参数和getline()的参数是一样的,只不过get()方法最后输入的回车会作为换行符被留着输入队列中
//因此如果连续两次调用get()方法,第二次调用的get()方法是都不到任何输入的字符的,因为第一个get()方法残留的换行符还被保存在输入队列中,第二个是要读取的字符数,如果第二个参数为20
//执行到第二个get方法时,则判断为输入结束
cin.get(name,20); //可以读到数据
cin.get(dessert,20); //都不到数据
//解决方法01
cin.get(name,20); //可以读到数据
cin.get(); //处理第一次get方法残留在输入队列中的换行符
cin.get(dessert,20);//可以读到数据
//解决方法02
cin.get(name,20).get(); //之所以可以这样是因为cinget(name,20)返回一个cin对象,改cin对象随后去调用get方法
cin.get(dessert,20).get();
//连续两次输入
cin.get(name,20).get(dessert,20); //可以实现连续两次输入
//坑
cin>>year; //输入年之后的回车键会生成换行符,并保存在输入队列中,在执行到cin.getline()时,便认为结束输入,因此在该剧下面加一句
cin.get();//去掉上一句中由回车键生成的换行符 也可以这样;(cin>>year).get();
cin.getline(address,80);
#-------------------------------------数组&&字符串----------------------------#
#include <iostream>
#include <cstring> //for strlen()
int main()
{
using namespace std;
int yam[3]={10,20,30}; //定义并初始化一个包含3个整形数的数组
float hotelTips[5]={2.0,5.5}; //部分初始化,编译器会把其余的元素设置为0
long totals[500]={0}; //将totals数组初始化为0
short things[]={1,5,3,8}; //也可以不说明数组元素的个个数,这件事让编译器去做
/* 字符串(存储在数组中) */
char dog[4]={'a','s','d','f'}; //不是字符串
char cat[4]={'a','s','d','\0'}; //是字符串,字符串必须以\0(空字符)结尾,用cout显示的时候,遇到空字符则停止
char fish[]="Bubbles"; //定义字符串的另一种方法,切忽略了数组元素的个数,并且自动在结尾加上了空字符*****
char shirt_size='s'; //定义字符常量***** 's'只是83的另一种写法,而"s"是两个字符(字符s和\0)组成的字符串,而且"s"实际上是表示字符串所在的内存地址
/* strlen()和sizeof()的区别 */
int fish_strlen=strlen(fish); //strlen()是计算出fish这个数组中有多少个字母,不包括结尾的空字符\0
int fish_sizeof=sizeof(fish); //sizeof()是计算出fish这个数组的长度:15字节,以字节为单位
}
2019.02.13 最近在家编辑于家23:28 haijing miss my home