c++关于结尾遇到‘\n’或其他特殊字符结束读取的问题(个人总结,大神勿喷)
2015-06-17 23:27
513 查看
//程序中经常遇到诸如“遇到回车换行符结束读取”的问题,说一下使用peek()解决的小方法,这里举个例子(这里主要写出程序中读取输入部分)
//假如要求“将输入的整型数据读入数组并处理,读取结束标志为'\n'”
#include<iostream>
#include<vector>
#include<cctype>
using namespace std;
int main()
{
vector<int> arr;
int temp;
while(cin.peek()!='\n')//这里使用peek()比较方便
{
while(cin.peek()==' ')//此循环只为了一种特殊情况:键盘输入时输入的为空格+回车无有效数据,此时程序终止
cin.get();
if(cin.peek()=='\n')
break;
cin>>temp;
arr.push_back(temp);
while(cin.peek()==' ')//此循环为了读取整型数据之后的空格
cin.get();
}
for(auto x:arr)//检查数组输入情况
cout<<x<<" ";
return 0;
}上述代码解决了在只输入回车换行、数字、空格的情况下正确读取数字的问题。
当输入中还有字符型,想要正确读取整型数据且遇到回车换行结束时循环代码如下:
while (1)
{
while (!isdigit(cin.peek()))//检查是否为非数字
{
if (cin.peek() != '\n') //如果非数字不为回车的话将其读走
cin.get();
else break; //为回车换行时退出检查
}
if (cin.peek() == '\n')//数据输入结束
break;
cin >> temp;
arr.push_back(temp);
}
//假如要求“将输入的整型数据读入数组并处理,读取结束标志为'\n'”
#include<iostream>
#include<vector>
#include<cctype>
using namespace std;
int main()
{
vector<int> arr;
int temp;
while(cin.peek()!='\n')//这里使用peek()比较方便
{
while(cin.peek()==' ')//此循环只为了一种特殊情况:键盘输入时输入的为空格+回车无有效数据,此时程序终止
cin.get();
if(cin.peek()=='\n')
break;
cin>>temp;
arr.push_back(temp);
while(cin.peek()==' ')//此循环为了读取整型数据之后的空格
cin.get();
}
for(auto x:arr)//检查数组输入情况
cout<<x<<" ";
return 0;
}上述代码解决了在只输入回车换行、数字、空格的情况下正确读取数字的问题。
当输入中还有字符型,想要正确读取整型数据且遇到回车换行结束时循环代码如下:
while (1)
{
while (!isdigit(cin.peek()))//检查是否为非数字
{
if (cin.peek() != '\n') //如果非数字不为回车的话将其读走
cin.get();
else break; //为回车换行时退出检查
}
if (cin.peek() == '\n')//数据输入结束
break;
cin >> temp;
arr.push_back(temp);
}
相关文章推荐
- C++面试宝典(整理版)3
- Effective C++条款07解读:为多态基类声明virtual析构函数 (某公司招聘面试试题)
- 用Natvis定制C++对象在Visual Studio调试时如何显示
- 【学习笔记】【C语言】变量的内存分析
- 《Effective C++》学习笔记——条款32
- [转]100个经典C语言程序(益智类问题)
- C++--何时需要定义赋值/复制构造函数
- 树的简单c语言实现(先中后序遍历)
- chapter13test3
- Effective C++条款06解读 : 若不想使用编译器自动生成的函数, 就应该明确拒绝
- C++标准库学习笔记(Weak Pointer)-4
- 顺序队列的c++实现
- 2048 c语言
- c++ dynamic_cast
- Longest Substring Without Repeating Character
- LeetCode—Remove Linked List Elements—C++
- C语言操作符和表达式以及数据类型提升实例以及疑惑
- LeetCode—Reverse Linked List—C++
- C++ TinyXml操作(含源码下载)
- CTime与COleDateTime的常用操作和比较