c++字符串的输入

先声明一下字符串的初始化:当初始赋值的时候一定是反斜杠0(\0)有三种方式“”,{‘\0’}."\0"(如果是已经赋值的我们可以采用memset(recvbuf, '\0', sizeof(recvbuf));这种方式来清空)

下面来介绍c++的几个关于按键输入捕获:

一.cin

  使用cin输入时,程序将输入视为一系列字节。每个字节都被解释为字符编码。不管数据类型是什么,输入一开始都是字符数据,然后cin对象负责将数据转换成其他类型。当你输入Michael Jackon时,通运行程序你会发现name只存储了Michael,这是为什么呢?

 原来是 cin使用空白(空格,制表符和换行符)来确定字符串的结束位置在读取字符数组时,cin将只会读取第一个单词,cin将该字符串放到数组中,并自动添加空字符Michael Jackon 之间的空格被当作结束符了,而Jackon被继续留在输入队列中,直到下一次读取输入。

二.getline()和cin.getline()

  两者的功能基本相同都可以接受空格,且会把换行符进行丢弃,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数。getline定义在string中,getline利用cin可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。 

函数原型有两个重载形式: 
istream& getline ( istream& is, string& str); / /默认以换行符结束 
istream& getline ( istream& is, string& str, char delim); 

#include <string> 
#include <iostream>
using namespace std;

int main()
{
    string str;
    getline(cin,str);
    cout<<str<<endl;
    return 0;
}

  函数作用:从标准输入设备键盘读取一串字符串,并以指定的结束符结束。 
函数原型有两个: 
istream& getline(char* s, streamsize count); // 默认以换行符结束 
istream& getline(char* s, streamsize count, char delim); 

#include<iostream> 
#include<string> 
using namespace std;

main () 
{ 
char m[3][20]; 
for(int i=0;i<3;i++) 
{ 
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl; 
cin.getline(m[i],20); 
}

三.cin.get

即cin.get(), cin.get(char ch), cin.get(array_name, Arsize) 
对应的函数原型如下: 
int cin.get(); 
istream& cin.get(char& var); 
istream& get ( char* s, streamsize n ); // 读取字符串时,默认以换行符结束。 
istream& get ( char* s, streamsize n, char delim ); // 读取字符串时,第三个参数可指定结束符读取字符的情况: 

输入结束条件:Enter键 对结束符处理:不丢弃缓冲区中的Enter cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的, 即:ch=cin.get() 与 cin.get(ch)是等价的.
cin.get(array,20);读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区,所以我们需要再调用一下cin.get();来处理掉换行符。

猜你喜欢

转载自www.cnblogs.com/yskn/p/9353875.html