私は最終試験に向けて勉強している C++ の初心者です。私は2つの方法でプログラムを書きました。最初のコードは を使用してcin.getline()
おり、正しく動作しません。2 番目のコードはcin.get()
and cin >>
and and を使用して、すべてを正しく実行します。
私は何が欠けていますか?例 1 の状況で、残りの入力プロンプトをスキップしてから、役に立たない数字を入力するのはなぜですか?
本質的に、およびcin.getline(ARRAYNAME,ARRAYSIZE)
の仕事をすることになっていませんか? 文字まで抽出し、 に配置し、最後にa を追加し、それ以降はデフォルトで ...に到達するまですべてスキップすることで機能しません か?setw(n)
cin.get(ARRAYNAME,ARRAYSIZE)
cin.ignore(int,char)
cin.getline(ARRAYNAME,ARRAYSIZE)
ARRAYSIZE-1
ARRAYNAME
\0
\n
編集:もう少し背景を説明するために、この例は私の教科書の前半(第3章と第4章)からのものです。私はその進歩をたどり、初期の忘れやすい概念について記憶を新たにしたかったのです。
string
文字列、ライブラリ、string
クラスについては後で (第 10 章)復習します。
助けてくれてありがとう!
-- ah08
PS ISBN 番号は、ISBN-13 (13 個の数字、4 つのハイフン) を保持するように設定されています。
ユーザーが書籍情報を入力する - 例 1 (正しく機能しない)
/*
In this version, I use "cin.getline(ARRAYNAME,ARRAYSIZE)",
but when I input a string with a length that's larger than the ARRAYSIZE,
weird things happen.
I include the cin.ignore(int,'\n') as a safety measure...
but is it really necessary?
*/
//BEGIN PROGRAM CODE
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
char date[9];
char ISBN[18];
char bookTitle[31];
int quantity;
double unitPrice;
cout << "Please enter the following information.\n";
// Input Date
cout << "Date (in MM/DD/YY format): ";
cin.getline(date,9);
// Display Date
cout << endl;
cout << "------------------" << endl;
cout << "*** " << date << endl;
cout << "------------------" << endl;
cout << endl;
// Input Quantity
cout << "Quantity of Books: ";
cin >> quantity;
cin.ignore(512,'\n');
// Display Quantity
cout << endl;
cout << "------------------" << endl;
cout << "*** " << quantity << endl;
cout << "------------------" << endl;
cout << endl;
// Input ISBN
cout << "ISBN (including hyphens): ";
cin.getline(ISBN,18);
// Display ISBN
cout << endl;
cout << "------------------" << endl;
cout << "*** " << ISBN << endl;
cout << "------------------" << endl;
cout << endl;
// Input Title
cout << "Book Title: ";
cin.getline(bookTitle,31);
// Display Title
cout << endl;
cout << "------------------" << endl;
cout << "*** " << bookTitle << endl;
cout << "------------------" << endl;
cout << endl;
// Input Price
cout << "Unit Price: ";
cin >> unitPrice;
cin.ignore(512,'\n');
// Display Price
cout << endl;
cout << "------------------" << endl;
cout << "*** " << unitPrice << endl;
cout << "------------------" << endl;
cout << endl;
cout << endl;
system("pause");
return 0;
}
//END PROGRAM CODE
//BEGIN PROGRAM OUTPUT
/*
Please enter the following information.
Date (in MM/DD/YY format): 12/03/1970
------------------
*** 12/03/19
------------------
Quantity of Books:
------------------
*** 2000596547
------------------
ISBN (including hyphens):
------------------
***
------------------
Book Title:
------------------
***
------------------
Unit Price:
------------------
*** -1.#QNAN
------------------
Press any key to continue . . .
*/
ユーザー入力書籍情報 - 例 2 (正しく機能する)
/*
In this version, I use "cin >> setw(ARRAYSIZE) >> ARRAYNAME"
or "cin.get(ARRAYNAME, ARRAYSIZE)" and follow either instance
with a "cin.ignore(int,'\n')", then everything works perfectly.
*/
//BEGIN PROGRAM CODE
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
char date[9];
char ISBN[18];
char bookTitle[31];
int quantity;
double unitPrice;
cout << "Please enter the following information.\n";
// Input Date
cout << "Date (in MM/DD/YY format): ";
cin >> setw(9) >> date;
cin.ignore(512,'\n');
// Display Date
cout << endl;
cout << "------------------" << endl;
cout << "*** " << date << endl;
cout << "------------------" << endl;
cout << endl;
// Input Quantity
cout << "Quantity of Books: ";
cin >> quantity;
cin.ignore(512,'\n');
// Display Quantity
cout << endl;
cout << "------------------" << endl;
cout << "*** " << quantity << endl;
cout << "------------------" << endl;
cout << endl;
// Input ISBN
cout << "ISBN (including hyphens): ";
cin >> setw(18) >> ISBN;
cin.ignore(512,'\n');
// Display ISBN
cout << endl;
cout << "------------------" << endl;
cout << "*** " << ISBN << endl;
cout << "------------------" << endl;
cout << endl;
// Input Title
cout << "Book Title: ";
cin.get(bookTitle,31);
cin.ignore(512,'\n');
// Display Title
cout << endl;
cout << "------------------" << endl;
cout << "*** " << bookTitle << endl;
cout << "------------------" << endl;
cout << endl;
// Input Price
cout << "Unit Price: ";
cin >> unitPrice;
cin.ignore(512,'\n');
// Display Price
cout << endl;
cout << "------------------" << endl;
cout << "*** " << unitPrice << endl;
cout << "------------------" << endl;
cout << endl;
cout << endl;
system("pause");
return 0;
}
//END PROGRAM CODE
//BEGIN PROGRAM OUTPUT
/*
Please enter the following information.
Date (in MM/DD/YY format): 12/03/1970
------------------
*** 12/03/19
------------------
Quantity of Books: 200
------------------
*** 200
------------------
ISBN (including hyphens): 0-123-45678-90xxxxxx
------------------
*** 0-123-45678-90xxx
------------------
Book Title: Anthony Goes to Hollywood, Summer 2012 Edition
------------------
*** Anthony Goes to Hollywood, Sum
------------------
Unit Price: 12.00
------------------
*** 12
------------------
Press any key to continue . . .
*/