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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

2回答

550閲覧

C++ の入力の方法がわからない

encho

総合スコア182

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

0クリップ

投稿2020/09/12 11:35

#C++ の入力の方法がわからない

AOJスタックに関する問題
上記の問題のcinを用いた入力方法がわかりません。

入力例 1 2 + 3 4 - *
出力例 -3
のようになれば良いですが
以下のコードを用いてcinで入力した場合に
出力が何もされません。

##実装

cpp

1#include <bits/stdc++.h> 2using namespace std; 3 4int top, S[1000]; 5 6void push(int x) { 7 S[++top] = x; 8} 9 10int pop() { 11 top--; 12 return S[top+1]; 13} 14 15int main(){ 16 int a, b; 17 top = 0; 18 string s; 19 while(cin >> s) { 20 if(s[0] == '+') { 21 a = pop(); 22 b = pop(); 23 push(a+b); 24 } else if(s[0] == '-') { 25 b = pop(); 26 a = pop(); 27 push(a-b); 28 } else if(s[0] == '*') { 29 a = pop(); 30 b = pop(); 31 push(a * b); 32 } else { 33 push(stoi(s)); 34 } 35 } 36 cout << pop() << endl; 37 return 0; 38}

##入力部分
この部分が問題があると思うのですがどのようにするべきかわかっていません。

cpp

1while(cin >> s) { 2... 3}

C言語ではこのように書きますがcinを用いた場合にどう表すべきなのでしょうか?

c

1while(scanf("%s", s) != EOF ) { 2... 3}

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

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

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

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

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

guest

回答2

0

ベストアンサー

1行入力した後に行頭で Ctrl-D を入力してみてください。

または、getline で 1行だけ読み込み、istringstream にその行をセットして
そこから読めばよいでしょう。

diff

1 top = 0; 2+ string line; 3+ getline(cin, line); 4+ istringstream iss(line); 5 string s; 6- while(cin >> s) { 7+ while(iss >> s) {

投稿2020/09/12 12:18

編集2020/09/12 13:22
kazuma-s

総合スコア8224

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

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

encho

2020/09/12 12:45

> 1行入力した後に行頭で Ctrl-D を入力してみてください。 こちらの方法で解決することができました。 ありがとうございます
guest

0

while ()を使いたい場合の方法は・・・
Win10,VSCode,コマンドプロンプトでの入力方法
1行分の入力データ入力後 改行
CTRL+Z

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 vector<string> v; 6 while (!cin.eof()) { 7 string s; 8 cin >> s; 9 v.push_back(s); 10 } 11 for (auto s : v) { 12 cout << s << " "; 13 } 14 cout << endl; 15 getchar(); 16} 17

input

11 2 + 3 4 - * 2^Z

output

11 2 + 3 4 - *

私はgetlineを使いましたがお好みで。

C++

1 string line; 2 getline(cin, line); 3

投稿2020/09/12 12:41

mjk

総合スコア303

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

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

encho

2020/09/12 12:46

回答ありがとうございます。 getlineで入力する方法もあるのですね! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問