1

Turbo C++ 3.0 コンパイラを使用しています

次のコードを使用している間..

char *Name;
cin >> Name;
cout << Name;

スペースを入力した場合...スペースの前に入力された唯一の保存文字..「QWERT YUIOP」と入力した場合のように...名前には「QWERT」が含まれます。

理由の説明はありますか??

4

3 に答える 3

6

を文字列の読み込みに使用するcinと、特に指定しない限り、空白で自動的に改行されます。

std::string s;
std::cin >> noskipws >> s;

または、行全体を取得する場合は、次を使用します。

std::getline(cin, s);

また、生の配列にストレージを割り当てたいと思うでしょうcharが、C++ ではstd::stringorstd::wstringとにかく使用する必要があります。

于 2010-02-02T13:03:11.500 に答える
2

名前を読み取る char 配列にスペースを割り当てる必要があります。 char *Name; char配列ではなくcharポインターのみを宣言するため、機能しません。何かのようなものchar Name[30];

また、cin <<文字列 (char name[30]) に 1 つの単語を入力できるのは だけです。
ただし、空白を含むテキストを読み取る cin 関数があります。

cin.get(name, MAX)  

get は、Max 文字が読み取られるか、行末文字 ('\n') に到達するまで、スペースを含むすべての文字を読み取り、それらを name 変数に入れます。

于 2010-02-02T12:58:32.247 に答える
1

何も指していない文字ポインターを宣言しました。文字列にスペースを割り当てる必要があります。最も一般的な方法は、スタック IE にスペースを割り当てることです。

char Name[50];

char ポインター自体は、実際のメモリがある場所にアドレスを配置するための場所にすぎないことを忘れないでください。メモリのブロックを取得し、ポインタにアドレスを格納する必要があります。上記のコードは、スタック上に Name の配列を作成し、Name を使用して最大 49 文字と null 端子を格納できます。

または、可変長文字列には std::string を使用します。

于 2010-02-02T12:58:24.900 に答える