同じく下の条件で下のプログラムを書き換えたいのですが、うまくできません。
分かる方、お願いします。
<条件>
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
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて
フォーラムルールをまず確認して下さい。
http://dixq.net/board/board.html
投稿前チェックリストに従っているかも十分にチェックした上で投稿をしているかの確認もお願いします。
あとタイトルが同じですが内容が違うようなので、別タイトルをお願いします。今回は私が変えておきます。
http://dixq.net/board/board.html
投稿前チェックリストに従っているかも十分にチェックした上で投稿をしているかの確認もお願いします。
あとタイトルが同じですが内容が違うようなので、別タイトルをお願いします。今回は私が変えておきます。
自分なりに行ったコードも投稿して下さい。これだと課題の丸投げになってしまいます。同じく下の条件で下のプログラムを書き換えたいのですが、うまくできません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)
マルチポストでしょうか?
名前が違いますので同じ方かはわかりませんが、既に回答が付いているようですね。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1480496664
名前が違いますので同じ方かはわかりませんが、既に回答が付いているようですね。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1480496664
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)
もひとつのスレッドの方もそうなのですが、この return "sin(theta)" というhase さんが書きました: char *sin_p(void){
return "sin(theta)";
}
作り方は、大丈夫なのですか?自分ではまず作らない書き方だと思いますが・・・
生存期間を過ぎてしまって、別の領域に割り当てられるという気がするのですが、
問題ないのでしょうか?詳しい方、教えてください。
non
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)
Cの規格は確認していませんが,僕の知っている実装ですと,文字列リテラルは静的な領域に割り当てられますので,プログラムの起動から終了まで有効です.non さんが書きました:もひとつのスレッドの方もそうなのですが、この return "sin(theta)" というhase さんが書きました: char *sin_p(void){
return "sin(theta)";
}
作り方は、大丈夫なのですか?自分ではまず作らない書き方だと思いますが・・・
生存期間を過ぎてしまって、別の領域に割り当てられるという気がするのですが、
問題ないのでしょうか?詳しい方、教えてください。
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)
beatleさん
そうですか。確かにマイコンなどプログラムをROMに書き込むときは、ROMのデータ領域に格納されますね。
情報、ありがとうございます。
そうですか。確かにマイコンなどプログラムをROMに書き込むときは、ROMのデータ領域に格納されますね。
情報、ありがとうございます。
non
Re: 関数ポインタとコマンドライン引数の組み合わせのプログラムについて(別件)
追加情報ですが,ウェブサーバーのApacheのソースコード/httpd/httpd/trunk/server/core.cの575行目では文字列リテラルをreturnしていますし,他の場所でも沢山同様のことをやってます.
まあ,有名なソフトウェアがやってるからといって規格で決まっている保証はありませんが.
まあ,有名なソフトウェアがやってるからといって規格で決まっている保証はありませんが.