入力した数値を入れ替えるプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
水翔

入力した数値を入れ替えるプログラム

#1

投稿記事 by 水翔 » 13年前

いつもお世話になります。

「入力した数値を入れ替えるプログラム」をうっているのですが上手くいきません。
改善方法について教えて下さい。初心者です。

mainの上で関数を宣言をしてます。

コード:


#include<iostream>

using namespace std;


int swap(int a, int b)
{
	int c;

	c = b; //bの値をcに代入
	b = a; //aの値をbに代入
	a = c; //cの値をaに代入

	return;
}

int main()

{
	int a, b;
	a = 10;
	b = 20;

	swap(a,b);

	cout << " a = "<< a << ", b = " << b <<endl;

	return;

}


アバター
tk-xleader
記事: 158
登録日時: 14年前
連絡を取る:

Re: 入力した数値を入れ替えるプログラム

#2

投稿記事 by tk-xleader » 13年前

関数の値は値渡しなので、関数内で引数を書き換えても元の変数が書き換わることはありません。

この場合、参照かポインタを使えば解決します。

コード:

int swap(int& a, int& b)
{
    int c;
 
    c = b; //bの値をcに代入
    b = a; //aの値をbに代入
    a = c; //cの値をaに代入
 
    return;
}
呼び出し方法は元のコードと同じです。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: 入力した数値を入れ替えるプログラム

#3

投稿記事 by beatle » 13年前

「数字を入れ替える」という本題からは外れるのですが、swap関数の戻り値をintにしているのに、return文で戻り値を指定しないのは良くありません。
void swapにするか、return文で値を返すかしてください。

アバター
ぱにしん
記事: 58
登録日時: 14年前
住所: 滋賀

Re: 入力した数値を入れ替えるプログラム

#4

投稿記事 by ぱにしん » 13年前

returnの値がありませんがこれはどうなんでしょう。
VisualC++以外だったらコンパイル通るんでしょうか・・・?

まぁそれはとりあえず置いときまして、
main関数で宣言されているa,bとswapの引数のa,bは異なるものです。
swap関数のa,bを変更してもmain関数のa,bは変更されません。

この書き方で意図されている動きをさせるなら参照渡しを使うのがいいと思います。

Programing Place C++編(言語解説) 第15章 参照

しかしこの程度ならわざわざswap関数を作らなくても直接main関数の中に書けば良いのではないのかと思いますが・・・

水翔

Re: 入力した数値を入れ替えるプログラム

#5

投稿記事 by 水翔 » 13年前

アドバイスをくれた方々、ありがとうございました。
プログラム勉強中で参考書に書いてる問題に取り組んでいたのですがいまいち理解が・・・

とりあえずポインタを使って問題解決しました。

コード:


#include<iostream>

using namespace std;

void swap(int *x , int *y)

{
	int z;

	z =*y; //bの値をcに代入
	*y=*x; //aの値をbに代入
	*x= z; //cの値をaに代入

		return;
}

int main()

{
	int a, b;
	a = 10;
	b = 20;

	swap(&a , &b);

	cout << " a = "<< a << ", b = " << b <<endl;

	return 0;

}
なら成立するのですが、

コード:


void swap(int *x , int *y)

{
	int z;

	z =*y; //bの値をcに代入
	*y=*x; //aの値をbに代入
	*x= z; //cの値をaに代入

		return 0;
}
と、returnを返そうとするとエラーがでます。

なんでですか・・・。

nil
記事: 428
登録日時: 13年前

Re: 入力した数値を入れ替えるプログラム

#6

投稿記事 by nil » 13年前

void 型関数に戻り値はありません
int swapであれば正常に動作しますが、
void型なのでエラーとなります

あとvoid型であれば関数末のreturnは不要ですよ

閉鎖

“C言語何でも質問掲示板” へ戻る