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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#1

投稿記事 by カメロンパン » 7年前

ファイル分割を勉強しているのですが、以下のようにしても結果がすべて「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になります。
どこがミスをしているのかわからないので、教えて下さい

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

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

#2

投稿記事 by beatle » 7年前

3を入力した時も4になりますか?

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#3

投稿記事 by カメロンパン » 7年前

beatle さんが書きました:3を入力した時も4になりますか?
失礼しました。
3を入力した場合3が表示されました。
ですが、なぜ3だけ・・・?

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

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

#4

投稿記事 by beatle » 7年前

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;
}

box
記事: 1746
登録日時: 9年前

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

#5

投稿記事 by box » 7年前

sub.cpp を、こんな風に修正してみましょう。

コード:

	else if(num==2)
	else if(num==3)
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 1746
登録日時: 9年前

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

#6

投稿記事 by box » 7年前

sub.cpp の別解

コード:

#include "sub.h"

int sub(int num)
{
    return (1 <= num && num <= 3) ? num : 4;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#7

投稿記事 by カメロンパン » 7年前

皆さんのお陰でわかりました。
一応、自分なりに以下のようにしてみたところ、無事動作しました。
ありがとうございます!

コード:

#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;
	}
}

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

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

#8

投稿記事 by nil » 7年前

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

閉鎖

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