- ベストアンサー
C言語のプログラム作成の課題の事なんですが
小数とアルファベットを入力したとき、例えば “123.45a” と入力したとき、 プログラムの中で整数型の変数で “123.45” を一つの数字(double型)として認識し、その 数字を出力せよ。 というプログラムを組む課題なんですがさっぱり?わかりません。どなたか教えて戴けないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
入力される文字列のパターンとして "123.45a"しかないものとします。つまり、"abc123.45" や "123abc.45"、"1.23.45"のようなものがない場合です。 char moji[80], temp[80]; double result; int i, c; scanf ("%s", moji); for (i = 0, c = 0; i < 80 && moji[i]; i++) { if (('0' <= moji[i] && moji[i] <= '9') || moji[i] == '.') { temp[c++] = moji[i]; } else { break; } } temp[c] = '\0'; result = atof (temp); 入力されるパターンが様々な場合はもう少し複雑になりますし、また期待される結果(出力)によっても複雑さが増します。 digit, sei,shou Cの標準関数にはないと思います。自分で作る関数でしょうか? isdigit は与えられた値が数値文字であるか否かを判定する関数(マクロ)です。if文の判定で使えます。
その他の回答 (4)
- yatokesa
- ベストアンサー率40% (201/496)
あなたはどこがわからないのですか? できたところまで掲載してみてください。 主なロジック部分は for文や while文等で一文字ずつ検査していくのが順当な方法です。
補足
えーっとはずかしながら全部わからないんです。最初からどうしていいのかわかりません。授業ではfor文を使ってたはずなんですが、digit, sei,shou、も使って作るようなんですが、どうしてよいのかわかりません。
- yatokesa
- ベストアンサー率40% (201/496)
整数型に少数を含む数値を入れることは出来ません。 整数部分と小数部分とに分けて保持するというのならかのうですが。 問題の意図として整数型というのは文字列(char型の配列)を指すのかと思いました。入力された文字列を検査し、数値を抜き出して浮動小数点型の変数に格納するという問題であれば良くある課題です。
補足
そうなんです。確かそういう問題だったのですがどうしてもわからないんです。明日の金曜提出なのですがまだ出来てなくて困っています。教えていただけないでしょうか?
- asaichi
- ベストアンサー率21% (37/171)
この問題の意図は 整数型に小数型を入れた場合、どのようになるか? をさしているのではないでしょうか? だとしたら簡単です。 #include <stdio.h> #include <stdlib.h> int main(void); int main(void) { int num; double fl; fl=atof("123.45a"); num=(int)fl; printf("flの値=%f\n", fl ); printf("numの値=%d\n", num ); } これで、少数型に入っている値を整数型に代入したら どのように変化するかがわかると思います。
整数型の変数でdouble型として認識・・・ わからなくて当然でしょうね。課題の意図を聞きなおした方がいいでしょう。
お礼
ありがとうございました。