最近C++を開始し、構文を理解しようとしていますが、配置に問題があります。有効なクレジットカードを要求するクレジットカード検証機能を実行してから、クレジットカードの種類を印刷する必要があります。
私の唯一の問題は、クレジットカードの種類を決定するためのifステートメントにあります。正確にどこに配置するのか、角かっこなどがないかどうかはわかりません。
私にとって問題となる正確なチャンクは次のとおりです。
if(c.substr(0, 2) == "65" || c.substr(0, 5) == "6011" || c.substr(0, 7) >= "622126" && c.substr(0, 7) <= "622925" || c.substr(0, 4) >= "644" && c.substr(0, 4) <= "649")
s = "You have a Discover card";
if(c.substr(0, 2) >= "51" && c.substr(0, 2) <= "55")
s = "You have a MasterCard card";
if(c.substr(0, 1) == "4")
s = "You have a Visa card";
if(c.substr(0, 2) == "34" || c.substr(0, 2) == "37")
s = "You have an American Express card";
これは私のコードです。
#include <iostream>
#include <string>
using namespace std;
void validateCC();
string checkCC(string, int, bool&);
bool validateCCNum(string);
void main() {
char again;
cout << "Validate a credit card number (Y/N)? ";
cin >> again;
while (toupper(again) == 'Y') {
validateCC();
cout << "Validate a credit card number (Y/N)? ";
cin >> again;
}
}
void validateCC() {
string ccn, msg;
bool OK;
int ccLen;
cout << "Please enter a 15 or 16 digit credit card number."
<< "\n(No spaces or hyphens): ";
cin >> ccn;
ccLen = ccn.length();
msg = checkCC(ccn, ccLen, OK);
if(!OK)
cout << msg;
else
if(validateCCNum(ccn))
cout << "Valid credit card number\n";
else
cout << "Invalid credit card number\n";
cout << "\n" << endl;
}
string checkCC(string c, int cLen, bool& ccOK) {
string s = "";
ccOK = true;
for(int i=0;i<cLen && ccOK;++i)
ccOK = isdigit(c[i]);
if(c.substr(0, 2) == "65" || c.substr(0, 5) == "6011" || c.substr(0, 7) >= "622126" && c.substr(0, 7) <= "622925" || c.substr(0, 4) >= "644" && c.substr(0, 4) <= "649")
s = "You have a Discover card";
if(c.substr(0, 2) >= "51" && c.substr(0, 2) <= "55")
s = "You have a MasterCard card";
if(c.substr(0, 1) == "4")
s = "You have a Visa card";
if(c.substr(0, 2) == "34" || c.substr(0, 2) == "37")
s = "You have an American Express card";
if(ccOK == false) {
s = "Invalid credit card number digits";
} else if(cLen == 15) {
if(c.substr(0, 2) != "34" && c.substr(0, 2) != "37") {
ccOK = false;
s = "Invalid American Express credit card number";
}
} else if(cLen != 16) {
ccOK = false;
s = "Invalid credit card number length";
}
return s;
}
bool validateCCNum(string cc) {
bool flip = true;
int tmp, num = 0;
int ccLen = cc.length()-1;
for(int ndx=ccLen;ndx>=0;ndx--) {
if(flip)
num += cc[ndx] - '0';
else {
tmp = (cc[ndx] - '0') * 2;
if(tmp <= 9)
num += tmp;
else
num += (1 + (tmp - 10)); // max of 18
}
flip = !flip;
}
return num % 10 == 0;
}
問題のあるチャンクが現在の場所に属しているのか、それともvalidateCC()セクションに配置してパラメーターを追加したのかわかりません。
ありがとうございました。