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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Makin
記事: 12
登録日時: 8年前

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

#1

投稿記事 by Makin » 8年前

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

コード:

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

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

return 0;
}


かずま

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

#2

投稿記事 by かずま » 8年前

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;
}

Makin
記事: 12
登録日時: 8年前

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

#3

投稿記事 by Makin » 8年前

かずまさん、回答ありがとうございます。C++のコマンドをあまり把握していないので、もう少し勉強しようと思います。

かずま

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

#4

投稿記事 by かずま » 8年前

Makin さんが書きました:C++のコマンドをあまり把握していないので、もう少し勉強しようと思います。
コマンドとは何でしょうか?

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

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

Makin
記事: 12
登録日時: 8年前

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

#5

投稿記事 by Makin » 8年前

クイック返信で返事をしていたので、解決!のチェックがあることに気が付きませんでした。すみません。

返信

“C言語何でも質問掲示板” へ戻る