cin用法集锦

本文详细解析了C++中各种输入函数的特点与用法,包括cin、cin.get、cin.getline、getline、gets及getchar等,通过实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;

1、cin 

输入的变量为整形时,会滤掉不可见字符(tab,回车,空格);接受字符串到字符数组时,遇见空格、回车、Tab结束

1、cin.get()

cin.get() 或 cin.get(字符变量名)或cin.get(字符数组名,数组长度)

2、cin.getline()    

cin.getline(字符数组名,接受个数) 或 cin.getline(字符数组名,接受个数,结束字符)

3、getline()

getline(cin,字符串string类型)

接受一个字符串,可以接收空格并输出,需包含“#include<string>”

和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

4、gets()

gets(字符数组名);接受一个字符串,可以接收空格并输出,需包含“#include<string>”

5、getchar()
ch=getchar()接受一个字符;需包含“#include<string>”
附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符

1、cin>>          

用法1:最基本,也是最常用的用法,输入一个数字:

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

输入:2[回车]3[回车]
输出:5

注意:>> 是会过滤掉不可见字符(如 空格 回车,TAB 等)
cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制

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

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

输入:jkljkljkl
输出:jkljkljkl

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

2、cin.get()
用法1:cin.get(字符变量名)可以用来接收字符

#include <iostream>
using namespace std;
main ()
{
char ch;
ch=cin.get();               //或者cin.get(ch);
cout<<ch<<endl;
}

输入:jljkljkl
输出:j

用法2:cin.get(字符数组名,数组长度)用来接收一行字符串,可以接收空格,最多接收(数组长度-1)个字符
#include <iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<<a<<endl;
}

输入:jkl jkl jkl
输出:jkl jkl jkl

输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)

输出:abcdeabcdeabcdeabcd              (接收19个字符+1个'\0')


cin.get(字符数组名,数组长度)接收一个空行时,cin将为假

#include <iostream>
using namespace std;
int main()
{
char input[Arsize];
char next;
cin.get(input, Arsize);
while (cin)
{
cout<<input<<endl;
cin.get(input, Arsize);//如果输入空行,cin为假,退出循环
}
system("pause");
}


用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.

#include <iostream>
using namespace std;
main ()
{

int t;
char a;
cin<<t;

cin.get();

cin<<a;
cout<<t<<"  "<<a<<endl;
}

输入:5回车a

输出:5  a 

cin.get()用于处理整数输入后的回车,如果没有cin.get()则a将接受回车,因为回车也是一个字符。            

3、cin.getline()   // 接受一个字符串,可以接收空格并输出,最后一个字符是‘\0’

#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

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

当用在多维数组中的时候,也可以用cin.getline(m,20)之类的用法:

#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,20);
}

cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

}

请输入第1个字符串:
kskr1

请输入第2个字符串:
kskr2

请输入第3个字符串:
kskr3

输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3

4、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

和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

注意:在使用getline时有一个奇怪的现象,在vc6下, 要打两次回车才可以结束

5、gets()        // 接受一个字符串,可以接收空格并输出,需包含“#include<string>”

#include<iostream>
#include<string>
using namespace std;
main ()
{
char m[20];
gets(m);                       //不能写成m=gets();
cout<<m<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkl jkl jkl
输出:jkl jkl jkl

类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:

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

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

cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

}

请输入第1个字符串:
kskr1

请输入第2个字符串:
kskr2

请输入第3个字符串:
kskr3

输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3

自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;

这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;

6、getchar()   //接受一个字符,需包含“#include<string>”

#include<iostream>
#include<string>
using namespace std;
main ()
{
char ch;
ch=getchar();                        //不能写成getchar(ch);
cout<<ch<<endl;
}

输入:jkljkljkl
输出:j

//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;

转载于 http://bbs.51cto.com/thread-578203-1.html

<think>好的,用户想了解C++中cin的使用方法和示例。首先,我需要回忆一下cin的基本用法,它是C++标准库中用于从标准输入读取数据的对象,属于<iostream>头文件。用户可能需要基础的例子,比如读取整数、字符串,或者更复杂的输入处理。 首先,我应该给出一个简单的示例,比如如何用cin读取一个整数。然后解释cin的工作原理,比如它会自动跳过空白字符,但遇到不符合变量类型的数据时会失败。这时候可能需要处理错误状态,比如使用clear()和ignore()。 接下来,用户可能想知道如何处理字符串,包括带空格的整行输入。这时候需要提到getline函数,因为它可以读取包括空格在内的整行内容,而cin本身在遇到空格时会停止读取。需要比较cingetline的区别,并给出示例代码。 另外,用户提供的引用内容里提到了使用getline(cin, s)的例子,这应该被包含在回答中,并正确引用。同时,引用还提到了相关书籍和文章,可能需要指出这些参考资料,帮助用户进一步学习。 还要注意用户提到的系统级指令,比如行内数学公式用$...$,但这个问题可能不涉及数学公式,所以可能不需要处理。但需要确保回答结构清晰,分步骤说明,并生成相关问题。 需要检查是否有常见的错误处理情况,比如输入类型不匹配时的处理,如何清空缓冲区等。这些细节对用户实际使用cin很重要。 最后,生成的相关问题应该围绕cin的扩展使用、常见问题解决以及与其他输入方法的比较,确保问题对用户深入学习有帮助。</think>### C++中`cin`的基本使用方法及示例 `cin`是C++标准库中`istream`类的对象,用于从标准输入(如键盘)读取数据。以下是具体用法和示例: --- #### 1. **基础输入(单值读取)** ```cpp #include <iostream> using namespace std; int main() { int num; cout << "请输入一个整数: "; cin >> num; // 读取输入并存储到num cout << "您输入的是: " << num << endl; return 0; } ``` - **说明**:`cin >> variable`会自动跳过空白字符(空格、换行符等),并尝试将输入转换为目标变量类型。若输入类型不匹配(如输入字母到`int`变量),`cin`会进入错误状态,后续输入操作失效[^1]。 --- #### 2. **多值连续读取** ```cpp #include <iostream> using namespace std; int main() { int a, b; cout << "请输入两个整数(用空格分隔): "; cin >> a >> b; // 连续读取两个值 cout << "a + b = " << a + b << endl; return 0; } ``` - **说明**:运算符`>>`可链式调用,按顺序解析输入流中的值。 --- #### 3. **字符串输入** ```cpp #include <iostream> #include <string> using namespace std; int main() { string name; cout << "请输入您的姓名: "; cin >> name; // 遇到空格会停止读取 cout << "姓名(cin读取): " << name << endl; cin.ignore(); // 清空缓冲区残留的换行符 cout << "请重新输入全名(包含空格): "; getline(cin, name); // 读取整行(包含空格) cout << "全名(getline读取): " << name << endl; return 0; } ``` - **关键区别**: - `cin >> variable`会因空格终止输入,适合读取单词。 - `getline(cin, str)`读取整行(包括空格),需搭配`cin.ignore()`清除缓冲区。 --- #### 4. **错误处理** ```cpp #include <iostream> using namespace std; int main() { int age; cout << "请输入年龄: "; while (!(cin >> age)) { // 检查输入是否有效 cin.clear(); // 清除错误状态 cin.ignore(1000, '\n'); // 清空缓冲区 cout << "输入无效,请重新输入: "; } cout << "年龄: " << age << endl; return 0; } ``` - **说明**:当输入类型错误时,需用`cin.clear()`重置状态,并用`cin.ignore()`清理缓冲区。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值