Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止在流中输入不需要的值_C++_String_Cin - Fatal编程技术网

C++ 防止在流中输入不需要的值

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::

这是我在这里的第二篇文章

我想问一下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;
}
#包括
#包括
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)第一个是我的确切意图。