0

ストリーム抽出演算子をオーバーロードする必要があります。これを行うには、ユーザーがプロンプトで「iamastring」などの文字列を入力できるようにします。次に、オペレーターが文字列から各文字を抽出し、空白かどうか、空白でないかどうかをテストします。文字配列内にあり、オブジェクトに渡されます。

@Chipetal。たとえば、出力画面に何も出力されるとは思っていません。代わりに、ユーザーが文字列を入力してEnterキーを押すと、新しいメニュー選択を入力するように再度求められます。現在のところ、ユーザーが文字列を入力するとEnterキーが押され、「不正な読み取りエラー」が表示され、プロンプトが戻って新しい入力を待ちます。

4

3 に答える 3

3

std::string と std::getline を使用していない理由はありますか? 独自の抽出演算子を作成する前に、2 回または 3 回考える必要があります。書式設定された入力は、C++ (または C の場合) の特に有用な機能ではありません。

于 2009-12-06T19:32:05.287 に答える
3

それはかなり面白いです-あなたの名前は私のものと同じですが、逆です:)

どうですか:

char buffer[buffSize+1]; // no need for dynamic allocation here
unsigned i = 0;
while(std::cin && !std::isspace(std::cin.peek()) && i < buffSize)
  buffer[i++] = std::cin.get();
buffer[i] = '\0'; // null termination can be important.
// i now contains the length btw

それはまさにあなた自身のコードであり、少しリファクタリングされています - 私はすべての不要なものなどを削除しました..

編集:ストリームステータスを確認し、スタックオーバーフローを防ぐように修正されました:)

編集 II: std::cin.good() && !std::cin.eof() を std::cin に変更しました。ところで: cin が bool ではなく void* に変換されるのはなぜですか?

于 2009-12-06T20:43:09.233 に答える
1

いずれにせよ、コードは壊れています。コードが無限ループに入る可能性があるため、致命的な可能性がある入力エラーは処理されません。ストリームの読み取り操作をカプセル化する場合は、ストリームが有効な状態にあるかどうかを注意深くテストする必要があります。

于 2009-12-06T20:56:55.373 に答える