193
#include <string>

std::string input;
std::cin >> input;

ユーザーは「Hello World」に入りたいと考えています。しかしcin、2 つの単語の間のスペースで失敗します。cinの全体を取り込むにはどうすればよいHello Worldですか?

私は実際にこれを構造体で行っていますが、cin.getlineうまくいかないようです。これが私のコードです:

struct cd
{
    std::string CDTitle[50];
    std::string Artist[50];
    int number_of_songs[50];
};

std::cin.getline(library.number_of_songs[libNumber], 250);

これにより、エラーが発生します。何か案は?

4

8 に答える 8

267

「失敗」しません。読むのをやめるだけです。字句トークンを「文字列」と見なします。

使用std::getline

#include <string>
#include <iostream>

int main()
{
   std::string name, title;
   
   std::cout << "Enter your name: ";
   std::getline(std::cin, name);
   
   std::cout << "Enter your favourite movie: ";
   std::getline(std::cin, title);
   
   std::cout << name << "'s favourite movie is " << title;
}

これは、sではなくCスタイルのバッファで機能すると同じではないことに注意してください。std::istream::getlinecharstd::string

アップデート

編集した質問は、元の質問とはほとんど似ていません。

文字列や文字バッファではなく、にしようとしgetlineていました。intストリームのフォーマット操作は、とでのみ機能しoperator<<ますoperator>>。それらの1つを使用する(そしてマルチワード入力に応じて微調整する)か、使用getlineして字句的にint事後変換します。

于 2011-04-30T01:13:27.830 に答える
124

使用する必要がありますcin.getline()

char input[100];
cin.getline(input,sizeof(input));
于 2011-04-30T00:52:02.993 に答える
15

cin で .getline 関数を使用したい。

#include <iostream>
using namespace std;

int main () {
  char name[256], title[256];

  cout << "Enter your name: ";
  cin.getline (name,256);

  cout << "Enter your favourite movie: ";
  cin.getline (title,256);

  cout << name << "'s favourite movie is " << title;

  return 0;
}

hereから例を取りました。詳細と例については、こちらをご覧ください。

于 2011-04-30T00:52:38.963 に答える
5

入力から文字列を読み取るにはどうすればよいですか?

std::cin次のように、空白で終了する単一の単語を読み取ることができます。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    cout << "Please enter a word:\n";

    string s;
    cin>>s;

    cout << "You entered " << s << '\n';
}

明示的なメモリ管理はなく、オーバーフローする可能性のある固定サイズのバッファもないことに注意してください。本当に (1 つの単語だけでなく) 行全体が必要な場合は、次のようにします。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    cout << "Please enter a line:\n";

    string s;
    getline(cin,s);

    cout << "You entered " << s << '\n';
}
于 2020-10-09T15:11:45.230 に答える
5

Cウェイ

getscstdio(c の stdio.h) にある関数を使用できます。

#include<cstdio>
int main(){

char name[256];
gets(name); // for input
puts(name);// for printing 
}

C++ の方法

getsc++11 で削除されました。

[推奨]:にあるgetline(cin,name)string.h またはそれ自体にあるcin.getline(name,256)を使用できますiostream

#include<iostream>
#include<string>
using namespace std;
int main(){

char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
于 2015-07-09T05:32:24.810 に答える