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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

Q&A

解決済

2回答

1698閲覧

<C++> エラー表示が出ますが、直せません。

tkz

総合スコア29

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

0グッド

0クリップ

投稿2016/02/04 02:23

以下のソースコードにおいて、❗️をうった三カ所にエラー表示が出ます。

#include <iostream>
#include <iomanip>
#include <cctype>
#define MAXDIGIT 30 /* 最大桁数MAXDIGIT */
using namespace std;

/* プロトタイプ宣言 /
void reset(char
,int);
void input(char*,int);
void add(char*,char*,char*,int);
void add_digit(char ,char ,char ,char* ,char* );
void display(char* ,char* ,char* ,int );
void lineprint(char ,char* ,int );
void linedraw(char ,int );

int main()
{

char a[MAXDIGIT],b[MAXDIGIT],c[MAXDIGIT]; /* char 型だが文字ではなく数値を扱う /
reset(a,MAXDIGIT); /配列aの初期化/
reset(b,MAXDIGIT); /配列bの初期化/
reset(c,MAXDIGIT);/配列cの初期化/
input(a,MAXDIGIT);/配列aに読み込み/
input(b,MAXDIGIT);/配列bに読み込み/
add(a,b,c,MAXDIGIT);/
a と b を足して結果を c に格納する / / a と b と c を出力 /
display(a,b,c,MAXDIGIT);/
maxdigit は最大桁数を表す変数 */

}

void reset(char* buf,int maxdigit) /* maxdigit は最大桁数を表す変数 */
{
int i;

for(i = 0; i < maxdigit; i++) buf[i]=0; /* 配列を 0 で初期化 */ return;

}

void input(char* buf,int maxdigit)
{
char str[MAXDIGIT]; /* 文法的には a や b と同じ char 型の配列であるが、 str は a や b とは異なり、文字列を扱う */

int i,j; ❗️printf("input data:"); cin >> str; /* キーボードからのデータを文字列として格納 */ //cout << str; i=0; while(str[i]!='¥0') i++; /* 文字列の長さを測定 */ j=0; while(i>0){ buf[j]=str[i-1]-'0'; /* 数字を表す文字コードを数値に換算 */ j++; /*bufには先頭(bufにとっての1の位)から順に数値を格納*/ i--; /*strでは最後尾(strではこちらが1の位)から順に文字を取り出す*/ } return;

}
void add(char* a,char* b,char* c,int maxdigit) /* maxdigit は最大桁数を表す変数 */
{

int i; char carry_in,carry_out; /* carry_in は下位の桁からの繰り上がり, carry_out は上位の桁への繰り上がり */ i=0; carry_in=0; /* 一桁目は下の桁からの繰り上がりが常に0 */ while(i<maxdigit) /* 一桁目から順に最大桁まで計算 */

{
add_digit(a[i],b[i],carry_in,&c[i],&carry_out); /* 一桁毎の計算 /
carry_in=carry_out; /
次の桁へ繰り上がりを渡す, 繰り上がり無しの場合は0*/
i++;
}

/* 数値データを文字データに変換 (教科書の緑色の見返しに記載された文字コードを参照)*/

i=0;

while(i<maxdigit)

{
a[i] = a[i]+'0';
b[i] = b[i]+'0';
c[i] = c[i]+'0';
i++;
}
return;

}

void add_digit(char a,char b,char carry_in,char* c,char* carry_out)
{
c=(a+b+carry_in)%10; / その桁の答えは 10 で割った余り */
carry_out=(a+b+carry_in)/10; / 次の桁への繰り上がりは 10 で割った商 */
return;
}

void display(char* a,char* b,char* c,int maxdigit)
{
lineprint(' ',a,maxdigit); /* 配列 a の出力 /
lineprint('+',b,maxdigit); /
足し算記号+と配列 b の出力 /
linedraw('-',maxdigit+1); /
横線------の出力 /
lineprint(' ',c,maxdigit); /
答えの配列 c の出力 */
return;
}

void lineprint(char c,char* line,int maxdigit) /* 仮引数cに渡された文字を1回出力し、配列 line を最後尾(上位桁)から順に出力 */

{
int i,maxdigitlimit; /* maxdigitlimit は maxdigit 個の配列の最終要素番号 */
maxdigitlimit=maxdigit-1;
❗️ cout << c;

for(i=maxdigitlimit;i>=0;i--){ /*配列lineは最後尾(上位桁)から先頭に向かって出力*/ cout << setw(1) << dec << line[i]; } cout << '¥n'; return;

}
❗️
void linedraw(char c,int length) /* 仮引数cに渡された文字を length 回出力 */
{
int i;
for(i=0;i<length;i++)
cout << c;
cout << '¥n';
return;
}

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

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

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

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

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

maisumakun

2016/02/04 02:30

どんなエラーが出たのかも示していただけませんか?
guest

回答2

0

ベストアンサー

こんにちは。

グローバル関数最後の}でエラーが出る時は、{ }( )の対応ミスが多いですね。
いつも見つけにくいので苦労します。

で、結論としては、/* */の対応に失敗しているようです。全部//コメントに変更するとエラーでませんでした。(MinGW 5.2.0とmsvc 2015)
でも、MinGWでは'\0'と'\n'が化けて警告がでます。どうも文字コードの問題もありそうです。Takuzenさんの貼り付けミスかもしれないし、teratailと私の環境の相性問題かもしれないです。
いづれにせよ、ここを参考にして編集欄の上部にある、B I A ◯ □ '' </></>を押すと入力されるマークの間にソースを貼りつけましょう。

更に、*/ */(スペースを1つ追加)へ変更したら、msvc 2015は通りますが、MinGWは通りませんでした。コンパイラの/* */の間の日本語処理にも問題が潜んでいるのかも。


【閑話休題】
昔は/* */はコンパイラによってネスト処理に相違があったので使わないことにしたのですが、今も何か問題が潜んでいるっぽいですし、対応をミスると本当に痛いのでなるべく使わないことをお薦めします。

printf()とiostreamを一緒に使うのは可能なら避けた方が良いです。単に固定文字列を出力するだけならprintfではなくてcoutを使いましょう。

投稿2016/02/04 03:17

Chironian

総合スコア23272

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

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

0

こんばんは。Xcodeは持ってないのでVisual Studio 2015でコピペして通してみましたが特にコンパイルエラーは出ませんでした。コメントや括弧の対応もあってると思います。
やはり、コンパイル時のエラーメッセージを見ないとなんとも言えませんね。

投稿2016/02/09 09:47

PineMatsu

総合スコア3579

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問