だから私はこのコードを持っていますが、コードの2行がスパイク読み取りされている理由がわかりません。この2行は、以下のコメントでマークされています。
#include <iostream>
#include<stdio.h>
using namespace std;
class publication{
char title[20];
int price;
public:
void getdata(){
cout<< "Enter the price of the book";
cin>>price;
cout<< "Enter the title"; #this line 1st
gets(title); #this is not running
}
void putdata(){
cout<<price;
puts(title);
}
};
class Tape:public publication{
float play;
public:
void getdata(){
cout<< "Enter play"; #this line 2nd
cin>>play;
}
void putdata(){
cout<<endl<<play;
}
};
int main()
{
publication p;
p.getdata();
p.putdata();
Tape t;
t.getdata();
t.putdata();
book b;
b.getdata();
b.putdata();
}
16行目と47行目をスキップした理由がわかりません。構文を確認しましたが、すべて問題ありません。このプログラムにはエラーはありません。私はc ++用のコードブロックとgnugccコンパイラを使用しています。これは画像です
この画像では、ご覧のとおり、タイトルの入力を行わずに2行が自動コンパイルされています。問題に関係のないコードの一部の行が削除されます。
これはIDEでもコンパイラでも問題ではありません。かわいそうなCodeBlocksのせいにしないでください:(
プログラムでgetsとputsを使用するように促した理由がわかりません。最適化が懸念される場合は、で使用std::ios::sync_with_stdio(false);
してみてくださいcin
また、gets
注意しないとバッファオーバーランが発生する可能性があるため、使用しないでください。fgets
代わりに使用してください。cplusplusとstackoverflowを参照してください
ここで問題が発生しましたが、16行目と47行目が省略されているように見える本当の理由は、コード内の不適切な印刷ステートメントとメッセージが原因です。スキップされているように見える唯一の行はgets(title);
です。実際、すべてが実行されます。
なぜgets(title)がスキップされるのですか?
したがって、priceを12と入力すると、実際には入力バッファに12\n
。として格納されます。を読み取った後12
も\n
、バッファに残ってcin
います。これは、新しい行を読み取らず、その新しい行を終了文字cin.getline
とgets
見なすためです。取得を参照してください
したがって、を使用してバッファをクリアします cin.ignore(numeric_limits<streamsize>::max(), '\n');
コードを少し再フォーマットしました。下記参照。fgets
改行を有効な文字として扱い\n
、タイトルに含まれるものを使用したことに注意してください。fgetsを見る
using namespace std;
class publication {
char title[20];
int price;
public:
void getdata() {
cout << "Enter the price of the book"<<endl;
cin >> price;
cout << "Enter the title" << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
fgets(title, 20, stdin);
}
void putdata() {
cout << "Price is " << price << endl;
cout << "Title is "<< title;
}
};
class Tape :public publication {
float play;
public:
void getdata() {
cout << "Enter play"<<endl;
cin >> play;
}
void putdata() {
cout << "Play is " << play << endl;
}
};
int main()
{
publication p;
p.getdata();
p.putdata();
Tape t;
t.getdata();
t.putdata();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加