18

スクリーンショット 先生がc++で割り当てをくれたので、scanfで文字列を取得しようとしていますが、最後に入力した文字しか取得できません。誰か助けてくれませんか?私はc++でconsole.readline()に相当するものを探しています。

編集:ポインタを介して値を格納できる必要もあります。

そのため、画像は現在バックグラウンドで実行されているコードを示しており、保証なしのマラディで停止する必要があります。入力を待機しましたが、スキップしました。

getline(cin、ptrav-> nam); 動作しますが、何らかの理由で行をスキップします...

4

2 に答える 2

36

あなたが探しているstd::getline()。例えば:

#include <string>
std::string str;
std::getline(std::cin, str);

ポインタを介して値を格納できる必要があると言うとき、私はあなたが何を意味するのかほとんどわかりません。

更新:更新された質問を見ると、何が起こっているのか想像できます。選択肢、つまり数値1、2などを読み取るコードは、改行を読み取っていません。getline次に、改行を消費する呼び出しを行います。getline次に、文字列をフェッチする呼び出しを再度行います。

于 2012-10-09T18:49:26.777 に答える
7

MSDNによると、Console :: ReadLine

Reads the next line of characters from the standard input stream.

C ++-バリアント(ポインターは含まれません):

#include <iostream>
#include <string>

 int main()
{
 std::cout << "Enter string:" << flush;
 std::string s;
 std::getline(std::cin, s);
 std::cout << "the string was: " << s << std::endl;
}


C-Variant(バッファーとポインターを使用)は、C ++コンパイラーでも機能しますが、使用しないでください。

 #include <stdio.h>
 #define BUFLEN 256

 int main()
{
 char buffer[BUFLEN];   /* the string is stored through pointer to this buffer */
 printf("Enter string:");
 fflush(stdout);
 fgets(buffer, BUFLEN, stdin); /* buffer is sent as a pointer to fgets */
 printf( "the string was: %s", buffer);
}


コード例によると、構造体がある場合patient(David heffermanの発言の後で修正):

struct patient {
   std::string nam, nom, prenom, adresse;
};

次に、以下が機能するはずです(論理的思考によってDavidHeffernanios::ignoreによって追加の問題が解決された後に追加されます)。コードで使用ないでください。scanf

...
std::cin.ignore(256); // clear the input buffer

patient *ptrav = new patient;

std::cout << "No assurance maladie : " << std::flush;
std::getline(std::cin, ptrav->nam);
std::cout << "Nom : " << std::flush;
std::getline(std::cin, ptrav->nom);
std::cout << "Prenom : " << std::flush;
std::getline(std::cin, ptrav->prenom);
std::cout << "Adresse : " << std::flush;
std::getline(std::cin, ptrav->adresse);
...
于 2012-10-09T19:11:58.703 に答える