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

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

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

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

C++

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

Q&A

解決済

2回答

1177閲覧

AOJのジャッジがうまくいきません

Magolors

総合スコア21

C

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

C++

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

0グッド

0クリップ

投稿2020/02/14 16:11

編集2020/02/14 16:15

前提・実現したいこと

AOJでスタックについての問題がREとなってしまいます。

発生している問題・エラーメッセージ

timeout: the monitored command dumped core 0.00user 0.00system 0:00.00elapsed 33%CPU (0avgtext+0avgdata 3328maxresident)k 0inputs+8outputs (0major+243minor)pagefaults 0swaps

該当のソースコード

C++

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

試したこと

AtCoderで以下の入力でコードテストをしたところ、正確に動作しています。

1 2 + 5 4 + * 1 2 + 1 2 + 3 4 - *

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

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

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

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

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

guest

回答2

0

Wandboxでは'%s' expects argument of type 'char*', but argument 2 has type 'std::string'~と警告されます。
この警告に従い、文字入力部分を修正する(scanfを使わない)と正解します。

投稿2020/02/14 17:38

can110

総合スコア38278

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

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

can110

2020/02/14 17:39

あ。全然遅かった。
guest

0

ベストアンサー

元のコードではwhile (scanf("%s", input) != EOF)の部分に問題(string inputchar *に見立てている)があって、

sh

1$ g++ -Wall -std=c++11 t1.cpp -o t1.exe 2t1.cpp: In function 'int main()': 3t1.cpp:11:29: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'st 4d::string {aka std::basic_string<char>}' [-Wformat=] 5 while (scanf("%s", input) != EOF) { 6 ^

実際、これを実行するとランタイムエラー(RE)で落ちます。

sh

1$ ./t1.exe 21 2 + 3Segmentation fault (core dumped)

scanfを使わず、こうすればOKなのでは。

C++

1 //while (scanf("%s", input) != EOF) { 2 // cin >> input; 3 while (cin >> input) { 4 if (input[0] == '+'){ 5...

実行してみます。テストパターンはAOJのサンプル問題です。EOF(CTRL+D)を与えるまで答えを出力していませんが、本問題では許容範囲なのでしょう。

sh

1$ g++ -Wall -std=c++11 t1b.cpp -o t1b.exe 2 3$ ./t1b.exe 41 2 + 53 6 7$ ./t1b.exe 81 2 + 3 4 - * 9-3

尚、試した環境は Windows10 cygwin g++ 7.4.0 です。C++11で確認しました。(C++14でもREです)

投稿2020/02/14 17:05

編集2020/02/14 17:10
dodox86

総合スコア9183

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

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

Magolors

2020/02/14 17:12

ありがとうございます。実行することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問