質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1688閲覧

cinをすることで、先に表示されるべき変数が上書きされる。C++

alizona

総合スコア126

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/11 06:30

編集2020/04/11 09:57

C++で、配列の要素の表示の後に、cinでinputしたいのですが、プログラムを実行すると、先に表示されるべき、配列の要素の上に、cinのinputが重なります。

イメージ説明

実現したい結果は、

adjective: ここに(input)

C++

1 2string* makeList(int size){ 3 string* listy=new string[size]; 4 return list; 5} 6 7 8getline(ifs,str); 9int size=stoi(str); 10 11string* list=makeList(size); 12 13for(int i=0;i<size;i++){ 14 getline(ifs,word); 15 list[i]=word; 16} 17 18for(int i=0;i<size;i++){ 19 cout<<list[i]<<": "; 20 cin>>name; 21}

このコード以前にも、getline(cin,variable)や、cinを使っていたので、

cin.ignore()などを試しましたが結果は変わりませんでした。

アドバイスいただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/04/11 06:35

cout<<list[i]<<": " << flush; だとどうなります?
alizona

2020/04/11 06:36

試してみます。
alizona

2020/04/11 06:40

同じ結果となりました。
alizona

2020/04/11 06:41

cout や、cinのストリームにゴミのような物が残ってこんなことになってるのでしょうか?
SHOMI

2020/04/11 06:56 編集

list[i]の内容に\r(0x0d)が含まれていませんか?
alizona

2020/04/11 07:03

listの中身は、 このような物なのですが、この質問にあげたコードの前に、先に1行目の 5を取得するために、 getline(ifs,length); をしています。 //中身 5 adjective noun plural noun adverb
thkana

2020/04/11 09:36

実行環境はどのようなものでしょうか。 LinuxなどにSSHログインしていて、端末の改行コード(\r/\r\n/\nの扱い)が適切でない、なんていう印象を持ったのですが。 #include <cstdio> int main(){ printf("hello\nworld.\n"); return 0; } ではどういう表示が得られますか?
alizona

2020/04/11 09:40

hello world. このように表示されました。 macOS Catalina version 10.15.3 MacBook Pro(Retina, 13-inch, Early 2015)です。
alizona

2020/04/11 09:46

cout<<"CHOOSE a-z: "; cin>>choice; では、しっかりと意図通りに CHOOSE a-z: (input) のように表示されたので、やはり動的で作成した配列が問題でしょうか? 質問文の中のコードの範囲を広げて再投稿しました。
thkana

2020/04/11 09:47

では、"adjective"を表示するコードの部分を示して下さい。
alizona

2020/04/11 09:50

わかりました。さらに追加します。
thkana

2020/04/11 09:51 編集

表示そのものは既にでていますね。失礼しました。 "adjective"をlistに設定する部分はどうなっていますか。 ("e"のあとに余計な文字が紛れ込んでいることを疑っています)
alizona

2020/04/11 09:58

質問を整理し終えました。 //オープンしてるファイルの中身 5 adjective noun plural noun adverb pronoun
thkana

2020/04/11 10:02

最近のMacの振る舞いを知らないのですが、 そのgetlineで取得しているファイルがWindowsで作成されたもので、改行コードが\x0d\x0aになっていて、Macと異なるので悪さをしている...なんてことはないでしょうか。
SHOMI

2020/04/11 10:04 編集

UNIX系OSでは改行コードはLF(\n,0x0A)です。 入力ファイルの改行コードがCR(\r,0x0D)LF(\n,0x0A)の場合、読み取られたバッファにCR(\r,0x0D)も入り、行頭に戻っているのだと思います。 cout<<"1\n"; cout<<"2\r"; cout<<"3\n"; のようにすると”2"の上に"3"が上書きされます。
alizona

2020/04/11 10:06

多分そうです。このファイルはwindowで作られてます。 macユーザーは、自分でファイルを作成してと言われたので、 コピペして、ファイルを作ったのですが、 手打ちで打ち込んでみます。
alizona

2020/04/11 10:10

手打ちするとかの問題ではありませんでした。ファイルを自分で作成したところ問題が解決いました。ありがとうございました。皆さんお世話になりました。 解決したスクショをあげときます。
guest

回答1

0

自己解決

イメージ説明

質問への追記・修正の依頼のコメントのおかげで解決しました。
ありがとうございました。

簡単にいうと、windowで作られたtextファイルをmacで、読み込もうとしておきたエラーでした。

投稿2020/04/11 10:11

編集2020/04/11 10:17
alizona

総合スコア126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問