関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

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

関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#1

投稿記事 by hase » 7年前

同じく下の条件で下のプログラムを書き換えたいのですが、うまくできません。
分かる方、お願いします。


<条件>
sin, cos, tan をそれぞれ指定するオプションとして、-s, -c, -t を与えるものとせよ。 これらは入力必須とせよ。また、これらのオプションの直後に、角度を表す実数値を受け取るものとせよ。
角度が度数 (degree) か、ラジアン単位 (radian) かを、それぞれオプション -d, -r で指定できるようにせよ。またこれらは省略可能とし、省略された場合はラジアン単位で角度が指定されたものとせよ。
オプションの順番は任意とせよ。つまり、(1) -s, -c, -t と角度、(2) -d, -r について、(1) と (2) の順番は入れ替えてもよいものとせよ。
オプションが指定されていない場合、および、オプションの指定に誤りがある場合、プログラムの使い方を表示せよ。


<プログラム>

#include <stdio.h>
#include<math.h>

char *sin_p(void){
return "sin(theta)";
}
char *cos_p(void){
return "cos(theta)";
}
char *tan_p(void){
return "tan(theta)";
}

int main (void)
{
double(*p[])(double num) = {sin, cos, tan};
char*(*q[])(void) = {sin_p, cos_p, tan_p};

int i;
double num;

printf("0: sin, 1: cos, 2: tan ? ");
scanf("%d", &i);

if((i>=0)&&(i<=2)){
printf("theta = ");
scanf("%lf", &num);
printf("%s = %f\n", q(), p(num));
}
return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて

#2

投稿記事 by softya(ソフト屋) » 7年前

フォーラムルールをまず確認して下さい。
http://dixq.net/board/board.html
投稿前チェックリストに従っているかも十分にチェックした上で投稿をしているかの確認もお願いします。

あとタイトルが同じですが内容が違うようなので、別タイトルをお願いします。今回は私が変えておきます。
同じく下の条件で下のプログラムを書き換えたいのですが、うまくできません。
自分なりに行ったコードも投稿して下さい。これだと課題の丸投げになってしまいます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
沖 滉均
記事: 237
登録日時: 9年前
住所: K県F市

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#3

投稿記事 by 沖 滉均 » 7年前

マルチポストでしょうか?
名前が違いますので同じ方かはわかりませんが、既に回答が付いているようですね。

http://detail.chiebukuro.yahoo.co.jp/qa ... 1480496664
There is no royal road to learning.
codeタグで指定できる言語
画像

non
記事: 1097
登録日時: 9年前

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#4

投稿記事 by non » 7年前

hase さんが書きました: char *sin_p(void){
return "sin(theta)";
}
もひとつのスレッドの方もそうなのですが、この return "sin(theta)" という
作り方は、大丈夫なのですか?自分ではまず作らない書き方だと思いますが・・・
生存期間を過ぎてしまって、別の領域に割り当てられるという気がするのですが、
問題ないのでしょうか?詳しい方、教えてください。
non

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

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#5

投稿記事 by beatle » 7年前

non さんが書きました:
hase さんが書きました: char *sin_p(void){
return "sin(theta)";
}
もひとつのスレッドの方もそうなのですが、この return "sin(theta)" という
作り方は、大丈夫なのですか?自分ではまず作らない書き方だと思いますが・・・
生存期間を過ぎてしまって、別の領域に割り当てられるという気がするのですが、
問題ないのでしょうか?詳しい方、教えてください。
Cの規格は確認していませんが,僕の知っている実装ですと,文字列リテラルは静的な領域に割り当てられますので,プログラムの起動から終了まで有効です.

non
記事: 1097
登録日時: 9年前

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#6

投稿記事 by non » 7年前

beatleさん
そうですか。確かにマイコンなどプログラムをROMに書き込むときは、ROMのデータ領域に格納されますね。
情報、ありがとうございます。
non

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

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#7

投稿記事 by beatle » 7年前

追加情報ですが,ウェブサーバーのApacheのソースコード/httpd/httpd/trunk/server/core.cの575行目では文字列リテラルをreturnしていますし,他の場所でも沢山同様のことをやってます.
まあ,有名なソフトウェアがやってるからといって規格で決まっている保証はありませんが.

non
記事: 1097
登録日時: 9年前

Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)

#8

投稿記事 by non » 7年前

確かにそうですね。ありがとうございます。
non

閉鎖

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