ページ 11

ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 21:44
by カメロンパン
ファイル分割を勉強しているのですが、以下のようにしても結果がすべて「else」になってしまいます。
どうしたらいいですか?

main.cpp

コード:

#include"sub.h"

int main(void)
{
	int num,risult;

	printf("1~3の好きな数値を入力してください。\n");
	scanf("%d",&num);
	risult=sub(num);
	
	printf("%d\n",risult);
	return 0;
}
sub.cpp

コード:

#include"sub.h"

int sub(int num)
{
	int ans=0;
	
	if(num==1)
	{
		ans=1;
	}
	if(num==2)
	{
		ans=2;
	}
	if(num==3)
	{
		ans=3;
	}
	else
	{
		ans=4;
	}

	return ans;
}
sub.h

コード:

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)

#ifndef __sub__
	#define __sub__

	int sub(int num);
#endif
入力:1
結果:4
というか、全てで4になります。
どこがミスをしているのかわからないので、教えて下さい

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 21:47
by beatle
3を入力した時も4になりますか?

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 21:49
by カメロンパン
beatle さんが書きました:3を入力した時も4になりますか?
失礼しました。
3を入力した場合3が表示されました。
ですが、なぜ3だけ・・・?

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 21:53
by beatle
1を入力したとしましょう。
すると、if(num==1)に引っかかりまして、ans=1;が実行されます。
しかし、if(num==3)には引っかかりませんので、elseが実行されます。

if(num==2)も同様。

numが3のときだけ、if(num==3)に引っかかりますので、ans=3;が実行されて、elseは実行されません。

コード:

#include"sub.h"
 
int sub(int num)
{
    int ans=0;
    
    if(num==1)
    {
        ans=1;
    } // ここでif文が終了。
    if(num==2)
    {
        ans=2;
    } // ここでif文が終了。
    if(num==3)
    {
        ans=3;
    } // ここだけif文は終了せず、elseが続く。
    else
    {
        ans=4;
    } // ここでif文が終了。
 
    return ans;
}

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 21:59
by box
sub.cpp を、こんな風に修正してみましょう。

コード:

	else if(num==2)
	else if(num==3)

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 22:03
by box
sub.cpp の別解

コード:

#include "sub.h"

int sub(int num)
{
    return (1 <= num && num <= 3) ? num : 4;
}

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 22:04
by カメロンパン
皆さんのお陰でわかりました。
一応、自分なりに以下のようにしてみたところ、無事動作しました。
ありがとうございます!

コード:

#include"sub.h"

int sub(int num)
{
	int ans=0;
	
	if(num==1)
	{
		ans=1;
		return ans;
	}
	if(num==2)
	{
		ans=2;
		return ans;
	}
	if(num==3)
	{
		ans=3;
		return ans;
	}
	else
	{
		ans=4;
		return ans;
	}
}

Re: ファイル分割がうまくいきません

Posted: 2012年11月28日(水) 22:31
by nil
この場合は条件分岐にelse ifを使うほうが正しいでしょう。
現在のプログラムは
if( num == 1 ){~~}を一塊
if( num == 2 ){~~}を一塊
if( num == 3 ){~~}else{~~}を一塊とするような物です。
ではなく
if(num==1){}
から
else{}までを一塊とするべきです。
オフトピック
switch文を使うのも手でしょうがね。