cin,cin.getline(),getline(cin,str)的用法

一、cin>>
用法1:输入一个数字或字符


#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}


用法2:接收一个字符串,遇“空格”、“TAB”、“回车”就结束


#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}


输入:jkljkljkl
输出:jkljkljkl


输入:jkljkl jkljkl       //遇空格结束
输出:jkljkl


二、cin.getline()
用法:接收一个字符串,可以接收空格并输出


#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}


输入:jkljkljkl
输出:jklj


接收5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;


如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl


输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf


延伸:
1、cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符)
2、当第三个参数省略时,系统默认为'\0'
3、如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk


三、getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>”


#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}


输入:jkljkljkl
输出:jkljkljkl


输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl


四、注意的问题
1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
方法一:str="\n"; getline(cin,str);

方法二:cin.clear(); cin.sync();

的方式作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。


趣味测试:

#include<iostream>

#include<string>

#include<sstream>
using namespace std;


int main(){
    string s1;
    string s2;
    cin>>s1;
    cout << "s1 is :" << s1 << endl;
    getline(cin, s2);
    cout << "s2 is :" << s2 << endl;
    system("pause");
    return 0;
}

正确程序:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
    string s1;
    string s2;
    string str;
    cin >> s1;
    cout << "s1 is :" << s1 << endl;
    str = "\n";
    getline(cin, str);
    getline(cin, s2);
    cout << "s2 is :" << s2 << endl;
    system("pause");
    return 0;
}
 


原文:https://blog.csdn.net/liusicheng2008_liu/article/details/80324502 
 

### C++ `cin.getline` 与 `std::getline` 的区别及用法 #### 输入方式的不同 `cin.getline` 是基于 C 风格字符串(即字符数组)的输入方法,而 `std::getline` 则用于读取到 `std::string` 类型的对象中。这意味着 `cin.getline` 更适合于传统的固定长度缓冲区操作,而 `std::getline` 提供了更现代化、动态内存管理的方式[^1]。 #### 参数数量和含义 - **`cin.getline(char* s, streamsize n)`**: 这是最简单的形式,其中第一个参数是一个字符数组地址,第二个参数表示最大可读取字符数(不包括终止符 `\0`)。如果遇到换行符或者达到指定的最大字符数,则停止读取。 - **`cin.getline(char* s, streamsize n, char delim)`**: 此版本允许自定义分隔符,默认情况下为换行符 (`\n`)。当检测到此特定分隔符时结束读入过程[^5]。 对于 `std::getline` 函数来说, - 它接受两个主要参数:一个是输入流对象 (通常是 `std::cin`) ,另一个是要存储数据的目标字符串变量名; - 可选第三个参数作为界定符,默认也是回车键(`'\n'`) 。不过值得注意的是,在实际应用过程中很少改变这个默认设置[^2]。 #### 处理空白字符的行为差异 相比起通过运算符 >> 来提取字段而言,无论是哪种 getline 形式都不会忽略开头处存在的任何种类白空格(比如空格、Tab 键)[^4]。因此当你希望保留这些原始格式化信息的时候应该优先考虑使用 getline 方法而不是简单依靠 >> 操作来进行逐项解析。 #### 测试实例分析 下面给出了一段程序用来展示两者之间的一些细微差别: ```cpp #include <iostream> #include <string> int main(){ const size_t SIZE = 8; char cstr[SIZE]; std::cout << "Enter up to seven characters followed by Enter:\n"; std::cin.getline(cstr, SIZE); // 使用 cin.getline 获取最多7个字符加上null terminator std::string str; std::cout << "\nEnter another line of text ending with newline character:\n"; std::getline(std::cin,str); // 使用 std::getline 将整行存入 string 对象 std::cout<<"\nThe content read via cin.getline is:"<<cstr<<". And its length is "<<strlen(cstr)<<".\n"; std::cout<<"The content read via std::getline is:"<<str<<". And its length is "<<str.length()<<"."; return 0; } ``` 在这个例子中可以看到如何分别利用两种 getline 技术从控制台获取用户输入的数据并打印出来它们各自的大小属性等等细节情况[^3]. #### 总结对比表 | 特性 | cin.getline | std::getline | |---------------------|----------------------------------|-------------------------------| | 返回类型 | void | istream& | | 存储目标 | 字符数组 | std::string | | 是否支持自定义定界符 | 支持 | 支持 | | 默认定界符 | '\n'(换行) | '\n'(换行) |
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值