首页 > 代码库 > 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++字符串输入方法比较(带回车不带回车输入)