次のコードは、最初の 2 つの getlines に対して意図したとおりに機能し、CC 変数を入力した後、getlines をスキップして入力を待機しない無限ループに入ります。
実行例は次のとおりです。
カード所有者名を入力 (または終了): John Doe
CC 番号を入力してください: 1234 1234 1234 1555
// コードは他の cout を出力しますが、getline の入力を待ちません。cout ステートメントを繰り返します。cin.ignore は役に立たないようです または cin.clear()
コード:
int main(int argc, char* argv[]) {
char CCName[64]; //cardholder name
char CCNumber[16]; //credit card number
char Expiration[8]; //expiration date
float Amount;
while (true) {
/* input processing block */
//gather card holder name
cout << "\nEnter card holder name (or quit): ";
cin.getline(CCName, 64);
//quit command processing
if (strcmp(CCName, "quit") == 1) {
cout << "\nYou successfully terminated the program\n";
//~ close(sockfd); //close socket
exit(EXIT_SUCCESS);
}
//gather credit card number
cout << "\nEnter CC number: ";
cin.getline(CCNumber, 16);
//error checking
if (strlen(CCNumber) != 15 && strlen(CCNumber) != 16) {
cout << "\nCredit card number must be 15 to 16 digits, try again: ";
cin.getline(CCNumber,16);
}
//gather expiration date
cout << "\nEnter expiration: ";
cin.ignore();
cin.getline(Expiration, 7);
//error checking
if (strlen(Expiration) != 7) {
cout << "\nExpiration date format mm/yyyy. Try again: ";
cin.getline(Expiration, 7);
}
//gather amount
cout << "\nEnter amount: ";
cin >> Amount;
}
return 0;
}