首页 > 代码库 > C/C++字符串输入方法比较(带回车不带回车输入)
C/C++字符串输入方法比较(带回车不带回车输入)
1.scanf
charstr[15];
scanf("%s",str);
abc 123
1) 不读入空格和回车,从空格处结束
2) 输入字符串长度超过字符数组元素个数不报错
3) 当输入项为字符指针时,指针必须已指向确定的有足够空间的连续存储单元
4) 当为数组元素地址时,从此元素地址开始存放
printf("%s",地址值)
输出时遇到第一个‘\0‘为止
2.gets和puts函数
开头必须stdio.h;
Gets输入时包括空格符,遇到回车结束
Puts遇到第一个‘\0’结束,自动加入换行符
3.fgets
而使用fgets函数时,只要第二个参数正好等于第一个参数传给它的数组的字节个数,那么fgets函数不会写出数组边界。所以,fgets函数是最好的选择。
fgets(...)读入文本行时的两种情况。
1).如果n大于一行的字符串长度,那么当读到字符串末尾的换行符时,fgets(..)会返回。并且在s的最后插入字符串结束标志‘\0‘。而s缓冲区剩余的位置不会再填充。
example:
123abc
fgets(s,10,fp);
此时,读入七个字符,123abc\n,实际上还有最后的‘\0‘,所以,strlen(s)=7;如果要去除末尾的\n,s[strlen(s)-1]=‘\0‘;便可。
2). 如果n小于等于一行的字符串的长度,那么读入n-1个字符,此时并没有读入\n因为并没有到行尾,同样在最后会插入‘\0‘.
example:
123abc
char s[5];
fgets(s,5,fp);
这时读入4个字符,123a,并没有换行符,所以strlen(s)=4.
4.cin
使用空白(空格,制表符和换行符)来定字符串的界的
5.getline()
读入整行数据,它使用回车键输入的换行符来确定输入结尾。
调用方法: cin.getline(str, len);
第一个参数str是用来存储输入行的数组名称,第二个参数len是要读取的字符数。
6.get()
调用方法:cin.get(str, len);
getline将丢弃换行符,而get()将换行符保留在输入序列里,但是字符串中并没有换行符。
使用cin.get()输入多行数据时,中间可以使用get()消除换行符。
int main()
{
char str1[30], str2[30];
cin.get(str1, 30);
cin.get();
cin.get(str2, 30);
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
return 0;
}
C/C++字符串输入方法比较(带回车不带回车输入)