怎样可以把字符数组定义的num的前四位限定一个输入数字范围,num的前四位输入要是合理年份

C++学生管理系统
为什么输入学号和性别是正确的形式,也会出现格式错误请重新输入的情况,是哪里的语法弄错了么?顺便问问,怎样可以把字符数组定义的num的前四位限定一个输入数字范围,我们有输入限制要求,num的前四位输入要是合理年份!

img

将性别判断的 或改成与

while (0!=strcmp(sex,x)&&0!=strcmp(sex,y))

当性别 不为 男 且 不为女时进入循环

既然已经是C++了 可以用 std::string 来写 num 和判断性别

// 假定 numstd::string
do{
cin >> num;
std::string year = num.substr(0,4);// 取学号前四位
int nyear = std::stoi(year);
if (num.size() != 12 &&nyear > 2023 && nyear < 1900)
cout <<"不符合条件请重新输入";
else
 break;
} while (num.size() != 12 &&nyear > 2023 && nyear < 1900);


// sex 也为 std::string
if (sex != "男" && sex != "女")

#include <iostream>
#include <string>
using namespace std;

bool isValidStudentID(string studentID) {
    if (studentID.length() != 12) {
        return false;
    }
    string year = studentID.substr(0, 4);
    int yearInt = stoi(year);
    if (yearInt >= 1900 && yearInt <= 2099) {
        return true;
    }
    return false;
}

int main() {
    string studentID = "202112345678";
    if (isValidStudentID(studentID)) {
        cout << "Valid student ID" << endl;
    } else {
        cout << "Invalid student ID" << endl;
    }
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7541371
  • 除此之外, 这篇博客: 用递归方式求解这个问题:一只母兔从四岁开始每年生一只小母兔,按此规律,第n年有多少只母兔?(C++程序设计-数据结构与算法-计算机等级考试-)中的 用递归方式求解这个问题:一只母兔从四岁开始每年生一只小母兔,按此规律,第n年有多少只母兔? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • >>随便撩撩
    同学们们有没有手里拿着一道递归思维题就头大?很多书上只介绍了递归的概念和逻辑运作,没有告诉我们如何快速高效的解决这类问题,多有不足,还请指正。

    >>分析
    1.递归思维:从外而内,从分支到根茎,从 n 到 1 。
    2.找到参数:这个参数串联这整个递归的所有层,这里明显为:n
    3.发现规律:每一层与其一个或多个内层(或某个内内…层)之间的联系:这里把每一年的兔子数量和n的变化做一个表格来对照,发现规律。没思路的时候就把每一项工整地列举出来,规律自然呈现。

    >>解答
    1.列举
    f(n)表示对应第n年的兔子总数
    n表示年次,第一年为一只[4]岁的兔子生了一个[0]岁的宝宝,故 f(1) = 2
    中括号的数量表示兔子数,内部的数字表示年龄

    在这里插入图片描述2.对比
    第一个四年为等差;
    第二个四年每年差值递增,但是差值的差值却是第一个四年的递增值;
    第三个四年每年差值递增更快,差值等于第二个四年的递增值。

    3.代换
    用前面兔子数 f() 来组合表示最后的 f() ,于是有了第二列表达式
    如图从左至右的代换
    得出:f(n) = f( n - 1) + f( n - 4 ) ,完美的递归函数,so everybody一起好好学数学!
    文件就是这个表格

    4.C++代码
    #include
    using namespace std;
    int func(int );
    int main ()
    {
    int n ;
    cin >> n ;
    cout << func ( n ) << endl ;
    return 0;
    }
    int func( int a )
    {
    return a <= 4 ? ( a + 1 ) : func ( a - 1 ) + func ( a - 4 ) ;
    }

  • 以下回答由chatgpt基于相关博客总结生成:

    首先,需要对输入进行格式限制。可以使用C++字符串流stringstream来实现。具体步骤如下:

    1. 在头文件中添加 #include 。

    2. 对于学号和性别的输入格式,可以使用如下代码进行限制:

    int num;
    string sex;
    cout << "请输入学号和性别(格式为 学号 性别):" << endl;
    while (cin >> num >> sex) {
        stringstream ss;
        ss << num << " " << sex;
        string input_str = ss.str(); // 将输入转换为字符串
        bool valid_input = true;
        string valid_sex[2] = {"男", "女"}; // 合法的性别选项
        string temp;
        // 使用stringstream逐个取出输入的学号和性别
        for (int i = 0; i < 2; i++) { 
            ss >> temp;
            if (i == 0) {
                // 判断学号输入是否为数字且长度为8
                if (temp.length() != 8 || !isdigit(temp[0])) {
                    valid_input = false;
                    break;
                }
            } else {
                // 判断性别输入是否为合法选项
                if (temp != valid_sex[0] && temp != valid_sex[1]) {
                    valid_input = false;
                    break;
                }
            }
        }
        if (valid_input) {
            // 输入格式正确,进行后续操作
            // ...
        } else {
            cout << "输入格式错误,请重新输入:" << endl;
        }
    }
    

    以上代码会逐个取出输入的学号和性别,然后分别进行判断。其中,学号需要判断是否为8位数字,性别需要判断是否为"男"或"女"。如果输入格式正确,则可以进行后续操作。

    接下来,需要限制num数组前四位只能输入合理年份。具体可以使用字符串操作来实现:

    1. 在头文件中添加 #include 。

    2. 在输入num时,取出前四位,然后判断是否为合理年份。代码如下:

    string num_str;
    cout << "请输入学生学号:" << endl;
    cin >> num_str;
    while (num_str.length() != 12) { // 判断学号长度是否为12
        cout << "学号格式错误,请重新输入:" << endl;
        cin >> num_str;
    }
    string year_str = num_str.substr(0, 4); // 取出前四位
    int year = stoi(year_str); // 将年份字符串转换为整数
    if (year < 2000 || year > 2022) { // 判断年份是否合法
        cout << "学号前四位必须为合理年份,请重新输入:" << endl;
        cin >> num_str;
    }
    

    以上代码使用substr函数取出num的前四位,然后使用stoi函数将字符串转换为整数。同时判断年份是否为合理范围内,如果不是则要求重新输入。