防止在流中输入不需要的价值
Preventing from entering unwanted value with in stream
这是我的第二篇文章。
我想询问std :: cin的概念,我想制作一个节省个人信息并在流中显示的程序,但是我需要确保用户不能输入与字符串和字符串和字符串和int中的"名称,姓氏,年龄"变量。
这是我的代码:
#include <iostream>
#include <string>
void getInformation(std::string & name, std::string & surname, int & age) {
std::cout << "Enter name: ";
std::cin >> name;
std::cout << "Enter surname: ";
std::cin >> surname;
std::cout << "Enter age: ";
std::cin >> age;
}
void showInformation(std::string name, std::string surname, int age) {
std::cout << "Name: " << name << std::endl;
std::cout << "Surname: " << surname << std::endl;
std::cout << "Age: " << age << std::endl;
}
int main() {
std::string name[ 2 ];
std::string surname[ 2 ];
int age[ 2 ];
for( int i = 0; i < 2; i++ )
getInformation( name[ i ], surname[ i ], age[ i ] );
for( int i = 0; i < 2; i++ )
showInformation( name[ i ], surname[ i ], age[ i ] );
return 0;
}
我知道这是非常基本的问题,但是我发现很难与Cin. -Good,Cin.sync打交道。如果有人可以解释解决这些问题的基本概念,我将很感激。
跟进Aeonos评论,我建议首先将所有输入记录到a std :: string ,然后使用一些转换库转换值,例如boost :: lexical_cast。
在标准C 中没有办法防止用户以该程序期望的不同形式提供输入。
最可能的是以某种形式读取所有输入,分析输入,丢弃不需要的零件,然后根据需要解释其余部分。
正如《永永评论》中提到的一个示例是将所有数据读取到std::string
(例如使用std::getline(std::cin, some_std_string)
)。读取字符串后,可以检查它是否包含一个名称(但是您指定)或整数(大概它仅包含数字,如果您期望输入一个正整数)。如果字符串不包含所需的输入形式,请丢弃输入,然后重复该过程(例如,在循环中)。如果确实包含所需形式的输入,请提取所需的值。
通常,您不会使用输入流操作员(cin >> whatever
)来执行此操作 - 错误检查选项过于限制。
相关文章:
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 为什么output_editor Concept不需要output_e迭代器标记
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- C++ 写入路径名中包含不需要的空字符的文件
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 使用 assimp 加载模型 - 不需要提升?
- 为什么转换函数声明不需要至少一个定义类型说明符
- C++:用户输入会产生不需要的行为
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 我的代码看起来不错,但某些输入会导致不需要的输出
- 为什么 while 循环不需要用户在 C++ 中输入
- 防止在流中输入不需要的价值
- 在c++中使用cin.get()从输入流中丢弃不需要的字符
- 当我不需要它进行C++计算时,如何忽略一些输入?
- 运行需要输入而不挂起的命令,但仍允许输入
- 需要帮助来弄清楚为什么我的数组不保存输入