字符串的输入
cin
输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。
例如:
程序中有下列语句:
static char str1[5],str2[5],str3[5];
cin>>str1>>str2>>str3;
运行时输入数据:
How are you?
若改为:
static char str[13];
cin>>str;
运行时输入数据:
How are you?
则str数组中只会存储“How”,其他的都无法保存。
而且,cin并不读取最终的回车换行符,所以,我们可以通过getchar()获取,举例如下:
char str[100];
cin>>str;
cout<<int(getchar())<<endl;//不读取也不存储结束符,故getchar不需要输入字符就可以输出结果
cout<<str<<endl;
/* output */
yang [输入、回车]
10 [输出]
yang [输出]
Press any key to continue
cin.getline(字符数组名St, 字符个数N, 结束符);
功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(缺省为'\n')。读入的字符串存放于字符数组St中。读取但不存储结束符。
注:1、可以读取空格,相对于cin
2、读取N个字符,但是如果我们直接输入字符串的话,则是只可以输入N-1个字符,因为字符串最后有'\0'。
3、结束符有缺省值,故我们可以只传递两个参数,也可以指定结束符,当输入指定的结束符的时候,输入结束。例如,我们可以指定输入结束符是'*'的话,我们可以这样:
cin.getline(str,20,'*');
这样当我们输入'*'的时候,输入结束。
4、读取但不存储结束符的意思是,如果我们输入的字符个数<N的时候,当我们输入的结束符是回车'\n'的时候,会从内存中读取回车换行符,所以,我们如果使用getchar()试图获取'\n'是无法获取的,也就是说,我们需要输入一个字符才行。举例如下:
char str[100];
cin.getline(str,20,'\n');
cout<<getchar()<<endl;//读取但不存储结束符,故此时需要输入一个字符
cout<<str<<endl;
/* output */
yang ming [输入、回车]
a [输入、回车]
97 [输出]
yang ming [输出]
Press any key to continue
cin.get(字符数组名St, 字符个数N, 结束符);
功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(缺省为'\n')。读入的字符串存放于字符数组St中。既不读取也不存储结束符。
1、其他的一样,除了“既不读取也不存储结束符”,我们可以尝试上面的例子:
char str[100];
cin.get(str,20,'\n');
cout<<getchar()<<endl;//不读取也不存储结束符,故此时可以读取输入字符串最后的回车,故值为10(回车换行的ASCII值)
cout<<str<<endl;
/* output */
yang ming [输入、回车]
10 [输出]
yang ming [输出]
Press any key to continue
当我们运行的时候,输入完字符串并按回车之后,好像并没有输入其他字符,就输出了一个数字10,这个数字10就是回车换行的ASCII值。所以说“既不读取也不存储结束符”的意思就是,并没有把结尾符'\n'读入内存,所以,我们使用getchar()的时候,获取的就是现在在内存中的'\n'。
gets()
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用原型是:
char*gets(char*buffer);
char str[50];
gets(str);
我们可以通过下面的程序查看gets读取了换行符,如下:
gets(str);
cout<<int(getchar())<<endl;
cout<<str<<endl;
运行的结果是我们需要输入一个字符,才可以作为getchar的返回值。
/* output */
yang ming [输入、回车]
a [输入、回车]
97 [输出]
yang ming [输出]
Press any key to continue
scanf
scanf()函数以空格、回车、Tab键作为输入的结束。如果输入的字符串中间有空格的话,空格之后的字符串无法读取。
scanf也是不读取输入结束符'\n',通过下面程序验证:
char str[100];
scanf("%s",str);
cout<<int(getchar())<<endl;
cout<<str<<endl;
/* output */
yang [输入、回车]
10 [输出]
yang [输出]
Press any key to continue
getchar()
获取单个字符,不读取回车符,通过下面的例子证明:
char c;
c=getchar();
cout<<int(getchar())<<endl;
cout<<c<<endl;
/* output */
a [输入、回车]
10 [输出]
a [输出]
Press any key to continue
综上所述,几个输入符中,
可以读取空格的有:cin.getline() cin.get() gets()
不可以读取空格的有:cin scanf
不读取不存储:cin cin.get() scanf() getchar()
读取不存储:cin.getline() gets()
参考:http://baike.baidu.com/view/751665.htm
参考:http://wenku.baidu.com/view/6387198402d276a200292ebc.html