ページ 11

キーボード入力時のスペースについて

Posted: 2017年4月22日(土) 10:16
by Makin
今C++でプログラムを作っているところなのですが、cinを使って文字列の入力をする際に、スペースを2回入れてしまうと、エンターキーを押した時点で、次の情報の入力に移らずにプログラムが終了してしまいます。これはどうやって回避したらいいのでしょうか?

コード:

int main(){
char address[100];
char name[30];
char nationality[30];

cin >> address;
cin >> name;
cin >> nationality;

return 0;
}


Re: キーボード入力時のスペースについて

Posted: 2017年4月22日(土) 14:09
by かずま
Makin さんが書きました:スペースを2回入れてしまうと、エンターキーを押した時点で、次の情報の入力に移らずにプログラムが終了してしまいます。これはどうやって回避したらいいのでしょうか?
どういう入力をしたのかを具体的に書きましょう。

東京都品川区大崎[スペース]かずま[スペース]日本[エンター]

このようにスペースを 2つ入力すると、3つの文字列を入力したのですから、
次の入力に移らずにプログラムが終了するのは当然です。

おそらく、次のように入力して、思い通りにならないと言っているのでしょう。

東京都[スペース]品川区[スペース]大崎[エンター]

istream::getline を使いましょう。

コード:

#include <iostream>
 
using namespace std;

int main()
{
    char address[100], name[30], nationality[30];

    cin.getline(address, 100);
    cin.getline(name, 30);
    cin.getline(nationality, 30);

    cout << address << ':' << name << ':' << nationality << endl;
}
C++ なんだから、string::getline を使ったほうがもっといいと思います。

コード:

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

int main()
{
    string address, name, nationality;

    getline(cin, address);
    getline(cin, name);
    getline(cin, nationality);

    cout << address << ':' << name << ':' << nationality << endl;
}

Re: キーボード入力時のスペースについて

Posted: 2017年4月22日(土) 14:19
by Makin
かずまさん、回答ありがとうございます。C++のコマンドをあまり把握していないので、もう少し勉強しようと思います。

Re: キーボード入力時のスペースについて

Posted: 2017年5月02日(火) 19:54
by かずま
Makin さんが書きました:C++のコマンドをあまり把握していないので、もう少し勉強しようと思います。
コマンドとは何でしょうか?

解決したのなら、「解決!」にチェックを付けて送信してください。
他にも解決にしていない投稿があるようです。

なお、
cin.getline(address, 100) の getline は、istreamクラスのメンバ関数ですが、
getline(cin, address) の getline は stringクラスのメンバ関数ではありません。
string::getline と書いてしまったことをお詫びします。

Re: キーボード入力時のスペースについて

Posted: 2017年5月03日(水) 02:21
by Makin
クイック返信で返事をしていたので、解決!のチェックがあることに気が付きませんでした。すみません。