質問です

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

質問です

#1

投稿記事 by » 15年前

こんばんわ、先日は御世話になりました
再び質問させて頂きます、今回はプログラミングの館とは関係ありません

例えば、「おはよう」「こんにちは」「こんばんわ」という文があったとします
Aという関数が1ならば「おはよう」のみ、2ならば「おはよう」「こんにちは」を表示
3以上ならば全てを表示するにはどのような式になるでしょうか?

if文を使うことも考えましたが、
if (A = 1) printfDx("おはよう");
else if (A = 2) printfDx("おはよう、こんにちは");
else printfDx("おはよう、こんにちは、こんばんわ");
と3つなら短いのですが数が増えると同じことを何度も書く羽目になってしまいます

if    (A = 1) printfDx("おはよう");
else if (A = 2) printfDx("おはよう、こんにちは");
else if (A = 3) printfDx("おはよう、こんにちは、こんばんわ");
else if (A = 4) printfDx("おはよう、こんにちは、こんばんわ、さようなら");
else if (A = 5) printfDx("おはよう、こんにちは、こんばんわ、さようなら、また明日");
else if (A = ……

--ここから追記--
又、文字ではなく関数の場合も御助力お願いします

if (A() == 1) example_1();
else if (A() == 2) example_1(); example_2();
else if (A() == 3) example_1(); example_2(); example_3();
else if (A() == ……
--ここまで追記--

何方か御力添えをお願いします

画像

フリオ

Re:質問です

#2

投稿記事 by フリオ » 15年前

 
 こんな感じでしょうか。
#include <stdio.h>

int main(void)
{
    char *s[/url] = {"おはよう", "こんにちは", "こんばんわ", "さようなら" ,"また明日"};
    int n = sizeof s / sizeof(char *), i;
    
    for(i = 0; i < 10; ++ i){
        int j;
        
        printf("%d ", i);
        for(j = 0; j < n && j < i; ++ j) printf("%s ", s[j]);
        putchar('\n');
    }
    return 0;
}
 

Re:質問です

#3

投稿記事 by » 15年前

ありがとうございます
10のところがAに当たるのですね

因みに、これが文字ではなく関数の時も使えますか?

conio

Re:質問です

#4

投稿記事 by conio » 15年前

---------------------------------------------------------------------------------------
if    (A = 1) printfDx("おはよう");
else if (A = 2) printfDx("おはよう、こんにちは");
else if (A = 3) printfDx("おはよう、こんにちは、こんばんわ");
else if (A = 4) printfDx("おはよう、こんにちは、こんばんわ、さようなら");
else if (A = 5) printfDx("おはよう、こんにちは、こんばんわ、さようなら、また明日");
else if (A = ……
---------------------------------------------------------------------------------------
とりあえず、上記のコードでは値を代入してしまっているので、修正する必要があると思います。

※関数Aの戻り値を判定するのであれば、
代入演算子(=)ではなく 等価演算子(==)を用います。
(if(A() == 1) みたいな。)


で、要するに指定した値の数だけ文字列を表示する、と言うことで宜しいでしょうか?
それならば、for文で指定した値を終了判定に用いて 繰り返し表示させれば良いと思います。
(添え字の範囲チェックもする。)
----------------------------------------------------------------------------------------
#include <iostream>

char *str[/url] = {"おはよう", "こんにちは", "こんばんは", "さようなら", "また明日"};
const int StrNum = sizeof(str) / sizeof(str[0]);

int A(int num){
return(num);
}

void DispStr(int num)
{
for(int i = 0; i < StrNum && i < num; i++){
std::cout << str << std::endl;
}
}

int main(void)
{
int input = 0;

do{
std::cin >> input;
DispStr(A(input));
}while(input != 999); //999で終了
return 0;
}
----------------------------------------------------------------------------------------
画像

Re:質問です

#5

投稿記事 by » 15年前

C言語では==でしたね、失念していました
どうにも数学と混じってしまいます、ありがとうございました

iostreamというのは初めて聞きましたが、考え方はわかりました
それで、49555と同じことなのですが、文字ではなく関数の時にも使えるでしょうか?

済みません、新規投稿の時点で書くべきでした
遅いかもしれませんが、追記しておきます

fatens

Re:質問です

#6

投稿記事 by fatens » 15年前

>文字ではなく関数の時にも使えるでしょうか?

下のような関数ポインタを使ったことがしたいのでしょうか?

#include <stdio.h>

void funcA(void) {puts("関数A");}
void funcB(void) {puts("関数B");}
void funcC(void) {puts("関数C");}
void funcD(void) {puts("関数D");}
void funcE(void) {puts("関数E");}

int main(void)
{
void (*pfunc[/url])(void) = {funcA, funcB, funcC, funcD, funcE};
int i, n = 3;

for (i = 0; i < n; ++i)
(*pfunc)();

return 0;
}

Re:質問です

#7

投稿記事 by » 15年前

はい、そんな感じです
こちらは関数ポインタという物を使えばよかったのですね

フリオさん、conioさん、fatensさん、ありがとうございました

閉鎖

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