如何为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
相关产品推荐
相关产品推荐

