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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

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

Q&A

解決済

1回答

6122閲覧

C++で括弧の対応を修正したい

DAISUKE45

総合スコア18

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

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

0グッド

0クリップ

投稿2019/03/04 09:02

前提・実現したいこと

現在、AtCoderの問題を解いています。問題の中で,ある整数が何個か与えられて、その整数が全て偶数のときは、2で割って、最大で何回2で割ることが出来るかというコードを書いています。
そこで、自分は①偶数判定関数、②半分にする関数を使って、実現させようと考えました。

コードを修正し、対応関係を直したいです。

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

./Main.cpp: In function ‘int main()’:
./Main.cpp:12:28: error: a function-definition is not allowed here before ‘{’ token
int odd_even(int suuji()){
^
./Main.cpp:41:1: error: expected ‘}’ at end of input
}
^

該当のソースコード

C++

1#include<bits/stdc++.h> 2using namespace std; 3 4int main(){ 5 int N,cou=0; 6 cin >> N; 7 vector<int> vec(N); 8 for(int i=0;i<N;i++){ 9 cin >> vec.at(i); 10 } 11 12 int odd_even(int suuji()){ 13 int len; 14 string moji;**** 15 len=suuji.size(); 16 for(int i=0;i<len;i++){ 17 if(suuji(i)%2==0){ 18 } 19 moji="even"; 20 return moji; 21 else{ 22 moji="odd"; 23 return moji; 24 break; 25 } 26 }**** 27 } 28 int hanbun(int suuji()){ 29 int len; 30 len=suuji.size(); 31 for(int i=0;i<len;i++){ 32 suuji(i) /= 2; 33 } 34 } 35 while(odd_even(vec)=="even"){ 36 hanbun(vec); 37 cou++; 38 } 39 cout << cou << endl; 40} 41 42

試したこと

Atomのエディターで括弧の対応を調べたところ、main(){は①と対応し、odd_even関数は②の部分と対応してしまいます。
(①②はソースコード上の番号)

補足情報(FW/ツールのバージョンなど)

AtCoder上でプログラム動かしています。
C++初めて、3日ほどです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数(main)の中に関数(odd_even,hanbun)は書けません。で、各関数はintを戻り値としていますが関数終了時のreturnがありません。

また、int suuji()とは何でしょう?

「追記」これでコンパイルは出来ます。あとは自分で・・

cpp

1#include <iostream> 2#include <vector> 3using namespace std; 4 5typedef vector<int> intv; 6 7int odd_even(intv &suuji); 8int hanbun(intv &suuji); 9 10int main() 11{ 12 intv::size_type N; 13 int cou = 0; 14 cin >> N; 15 intv vec(N); 16 // 17 for (intv::size_type i = 0; i < N; i++) { 18 cin >> vec[i]; 19 } 20 21 while (odd_even(vec) == 0) { 22 hanbun(vec); 23 cou++; 24 } 25 cout << cou << endl; 26 // 27 return 0; 28} 29 30int odd_even(intv &suuji) { return 0; } 31 32int hanbun(intv &suuji) { return 0; } 33 34

投稿2019/03/04 09:19

編集2019/03/04 10:48
cateye

総合スコア6851

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

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

DAISUKE45

2019/03/04 09:42

回答有り難うございます。 main関数から関数(odd_even,hanbun)外に出します。 終了のreturnはodd_evenに関しては、for文の中にあるやつでreturnにならないのでしょうか? int suuuji()は配列を引数としてます。
DAISUKE45

2019/03/04 09:46

ありがとうございます。 残りは自分で考えます。
cateye

2019/03/04 11:03 編集

配列を受け取る時は、int suuji[]と書きます。vectorと配列は違うのでvectorを渡して配列で受け取ることは出来ません気をつけましょう。「処理系が分からないのでソース修正」unsigned long → intv::size_type
cateye

2019/03/04 11:01

>for文の中にあるやつで〜・・・もし、lenが0だったらfor(int i=0;i<len;i++)は一度も実行されずに関数は終了します。その時のreturnがないのです。“if文にもelse節にもreturnがあるから関数本体のreturnはいらない”という時も関数末尾にはreturnを入れましょう。大きな関数になるとわけが分からなくなるw・・・まぁ、そんな大きな関数作るほうが問題ですがw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問