C++循环文本输入-cin、cin.get(char)、cin.fail()

网友投稿 1728 2022-05-29

1.最简单的:

如果程序要使用循环来读取来自键盘的文本输入,并且遇到'#'字符时就停止读取输入

//循环使用cin

#include

int main()

{

using namespace std;

char ch;

int count = 0;

cout << "输入字符串;以# 表示退出: \n";

cin >> ch;

while (ch!='#')

{

cout << ch;

++count;

cin >> ch;

}

cout << endl << count << "字节\n";

system("pause");

return 0;

}

输入:my name is hello#world!

观察输出结果,发现确实以‘#’为截止符,但是为什么程序在输出时省略了空格呢?原因在于cin,读取char值的时候,与读取其他基本类型一样,cin将忽略空格和换行符,所以空格没被显示,也没被计数。

2. 使用cin.get(char)进行补救

//循环使用cin.get()

#include

int main()

{

using namespace std;

char ch;

int count = 0;

cout << "输入字符串;以# 表示退出: \n";

cin.get(ch); //替换 cin >> ch;

while (ch != '#')

{

cout << ch;

++count;

cin.get(ch); //替换 cin >> ch;

}

cout << endl << count << "字节\n";

system("pause");

return 0;

}

输入:my name is hello#world!

C++循环文本输入-cin、cin.get(char)、cin.fail()

此时,空格也被记录下来。

(备注:有的同学会很好奇,cin.get()似乎能够有1个参数,也可以2个参数,这到底怎么使用?这个其实是C++重载特性)

3. 进阶:假如'#'本身就有用,那么岂不是这个截止符 还要换?答案是:不必麻烦!有文件尾条件EOF

使用CTRL+Z  来模仿结束

//循环使用cin.get() ,截止符EOF默认

#include

int main()

{

using namespace std;

char ch;

int count = 0;

cout << "输入字符串;以# 表示退出: \n";

cin.get(ch); //替换 cin >> ch;

while (cin.fail() == false ) //替换 while(ch != '#')

{

cout << ch;

++count;

cin.get(ch); //替换 cin >> ch;

}

cout << endl << count << "字节\n";

system("pause");

return 0;

}

备注:51字节,其实包含了最后CTRL+Z这一个。

C++

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:例12:C语言统计捐款人数及人均捐款数
下一篇:SQLite学习笔记(一)
相关文章