You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为char数组添加条件限制?C++代码逻辑问题咨询

解决方案

没问题,我来帮你搞定这两个需求,咱们一步步梳理修改思路:

1. 实现条件验证:v[0]介于0-19之间且v[0]+v[1]≤19

这个条件需要在**读取(case1)和写入(case2)**环节分别处理:

  • 写入时:用户输入完成后立刻验证,不满足就提示错误并返回菜单;
  • 读取时:输出数组前先检查合法性,不符合条件就终止当前操作。

注意:你用了char数组存储数值,实际存储的是字符(比如输入2会存成'2'),所以需要转成数值再做判断。

2. case1的特殊输出:n=2且元素为2、3时输出2 3 4

在读取逻辑的末尾加个判断:当n等于2,且v[0]是字符'2'、v[1]是字符'3'时,额外输出指定内容。

修改后的完整代码

#include <iostream>
#include <cstdlib> // 用于exit()函数
using namespace std;

int main() {
    char v[20];
    int pc, functie, n, i;

    do {
        cout << "Este pornit calculatorul? (0/1) ";
        cin >> pc;
    } while (pc != 1);

loop:
    cout << "Ce functie selectati? 1-4 ";
    cin >> functie;

    switch (functie) {
        case 1:
            cout << "Citire din memorie" << endl;
            cout << "Cate numere cititi din memorie: ";
            cin >> n;

            // 验证条件:v[0]∈[0,19] 且 v[0]+v[1]≤19
            bool isValid = true;
            if (n >= 1) {
                int val0 = v[0] - '0'; // 把字符转成数值
                if (val0 < 0 || val0 > 19) {
                    isValid = false;
                }
                if (n >= 2) {
                    int val1 = v[1] - '0';
                    if (val0 + val1 > 19) {
                        isValid = false;
                    }
                }
            }

            if (!isValid) {
                cout << "Eroare: Conditiile nu sunt indeplinite! v[0] trebuie sa fie intre 0 si 19, si v[0]+v[1] <=19" << endl;
                goto loop;
            }

            // 输出数组元素
            for (i = 0; i < n; i++) {
                cout << "v[" << i << "]=" << v[i] << endl;
            }

            // 处理特殊情况:n=2且元素为2、3时输出2 3 4
            if (n == 2 && v[0] == '2' && v[1] == '3') {
                cout << "2 3 4" << endl;
            }
            break;

        case 2:
            cout << "Scriere in memorie" << endl;
            cout << "Cate numere scrieti ";
            cin >> n;

            // 输入数组元素
            for (i = 0; i < n; i++) {
                cout << "v[" << i << "]= ";
                cin >> v[i];
            }

            // 验证输入是否符合条件
            isValid = true;
            if (n >= 1) {
                int val0 = v[0] - '0';
                if (val0 < 0 || val0 > 19) {
                    isValid = false;
                }
                if (n >= 2) {
                    int val1 = v[1] - '0';
                    if (val0 + val1 > 19) {
                        isValid = false;
                    }
                }
            }

            if (!isValid) {
                cout << "Eroare: Datele introduse nu indeplinesc conditiile! v[0] trebuie sa fie intre 0 si 19, si v[0]+v[1] <=19" << endl;
                goto loop;
            }
            break;

        case 3:
            cout << "Golirea memoriei" << endl;
            for (i = 0; i < 20; i++) { // 改为清空整个数组,避免n未初始化的问题
                v[i] = '\0';
            }
            break;

        case 4:
            cout << "Oprirea calculatorului";
            exit(0);
            break;

        default:
            cout << "Nu ati selectat nici o functie" << endl;
    }
    goto loop;
}

关键改动说明

  • 条件验证:通过v[0]-'0'把字符转成整数,方便数值比较;分情况判断n的长度(n≥1才检查v[0],n≥2才检查和),验证失败直接返回菜单;
  • 特殊输出逻辑:直接匹配字符'2'和'3'(因为char数组存的是输入的字符),满足条件时额外输出内容;
  • 小优化:case3清空数组时,原来的n可能未赋值(比如用户直接选清空),所以改为清空整个20长度的数组,避免访问未定义内存。

内容的提问来源于stack exchange,提问作者Daniel Iacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:22:56