C++ 防止在流中输入不需要的值
这是我在这里的第二篇文章 我想问一下std::cin的概念,我想制作一个保存个人信息并在流中显示的程序,但我需要确保用户不能在“姓名、姓氏、年龄”变量中输入与字符串和int不同的值类型。C++ 防止在流中输入不需要的值,c++,string,cin,C++,String,Cin,这是我在这里的第二篇文章 我想问一下std::cin的概念,我想制作一个保存个人信息并在流中显示的程序,但我需要确保用户不能在“姓名、姓氏、年龄”变量中输入与字符串和int不同的值类型。 这是我的密码: #include <iostream> #include <string> void getInformation(std::string & name, std::string & surname, int & age) { std::
这是我的密码:
#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;
}
#包括
#包括
void getInformation(标准::字符串和名称,标准::字符串和姓氏,整数和年龄){
std::cout>name;
std::cout>姓氏;
std::cout>年龄;
}
void showInformation(标准::字符串名称,标准::字符串姓氏,整数年龄){
STD::在AEONOS注释中,我建议首先将所有输入记录到STD::string,然后使用一些转换库转换值,例如< P> >标准C++中没有办法阻止用户以不同于程序期望的形式提供输入。
最可能的方法是以某种形式读取所有输入,分析输入,丢弃不需要的部分,并根据需要解释其余部分
Aeonos在评论中提到的一个例子是,将所有数据读取到std::string
(例如,使用std::getline(std::cin,some_std_string)
)中。读取字符串后,可以检查它是否包含名称(无论您如何指定)或整数(如果您希望输入正整数,则它可能只包含数字)。如果字符串不包含所需形式的输入,则放弃该输入,然后重复该过程(例如在循环中)。如果它确实包含所需形式的输入,则提取所需值
一般情况下,您不会使用输入流操作符(cin>>无论什么
)为此,错误检查的选项太有限。最常见的方法是,记录在字符串或变量类型中输入的所有内容,然后通过检查验证输入,如果输入是数字或必须应用于输入的任何标准。之后,可以将输入转换为适当的类型根据要存储的信息设置int等格式。请澄清问题。假设正在输入年龄。您希望实现哪种行为:(1)如果用户输入带有非数字字符的字符串,则再次查询年龄;或者(2)如果用户在键盘上按非数字键,则不会发生任何操作(这个字符甚至没有显示在控制台屏幕上)?(1)第一个是我的确切意图。