質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

882閲覧

初学者です。課題のヒントが欲しいです。完全に詰まっています。

haru0

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/12/01 13:22

前提

文字列で”-123.45”などの浮動小数点を入力すると数値として返してくれるコードを書きたいです。atof関数などの関数は使ってはいけません。
完全に詰まっています。何かしらのヒントを頂けると幸いです。

本当に漠然とcaseを使うかなと思いましたが、全く分かりません。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/12/01 13:27

入力が整数ならできますか?
haru0

2022/12/01 19:23

文字列で入力された数字をcaseで一つ一つ判定して数値に変えた後それを繋げるのかなと思いました。
thkana

2022/12/01 21:53

正解、という言葉すらよくないかな。そういうことができるプログラムなんて何通りも考えられるので、まずはその方針を押し通して作ってみてはいかがですか?
haru0

2022/12/01 22:59

了解です。ありがとうございました。
fana

2022/12/02 02:01

(あ,コレ,"-123.45" みたいな入力を扱えるコード提出したら「"1.2e-3" が扱えてないからダメ」って言われる系の課題だ)
guest

回答3

0

ベストアンサー

ヒントだけ。
文字の'0'から'9'を数値の0から9に変換することを考えよう
それができるようになれば、2桁、あるいはそれ以上の桁の文字列を数値変換できるようになります

投稿2022/12/01 13:30

編集2022/12/01 13:32
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru0

2022/12/01 19:11

文字列を一つずつcaseで数値に変換してそれを最後のつなげればいける繋げればいけるかなと考えていましたが、どうでしょうか?ただそれだと少数がをどうすればいいのかいまいち思いつきません。 この考え方はどうでしょうか?
y_waiwai

2022/12/01 22:09

それでもいいとおもいます。 まずは、マイナスやら小数点は横においておいて、 整数だけ変換できるようにやってみましょう。 それがしっかりできてから、あとのことは考えよう とりあえず、文字一つ入れたら、数値を返すような関数を考えてみては
haru0

2022/12/01 23:45

了解です。ありがとうございました。
jimbe

2022/12/02 02:39 編集

整数で最後に繋げることで2桁3桁…と出来れば、小数点があった以降は小数点以下1桁2桁…と繋げていけるはずです。 ただ少数は誤差が出てきますので、気にするなら、小数点の位置を覚えておいて全体を(小数点を無いものとして)整数として変換してから小数点の桁で割る方がより正確になるかもしれません。
guest

0

手順を分解して考えていけば難しくないです。
例えば以下のような手順に分解することができます。
このように分解した手順のことをアルゴリズムといいます。

  • '0'から'9'までの文字を数値に変換する処理を考える
    • int ctoi(char c)
    • int n = ctoi('0'); /* n==0 */
    • int n = ctoi('9'); /* n==9 */
  • 文字列の符号を除いた整数部分の桁数を求める処理を考える
    • 123.456ならば、3桁になる
    • -12.34ならば、2桁になる
  • 上位桁から順に文字を数値に変換して対応する桁を乗算する
    • 例えば"123.456"ならば、最初の値が100の桁なので
    • 1*100 + 2*10 + 3*1 + 4*0.1 + 5*0.01 + 6*0.001
    • のように計算していく
  • 文字列の符号が負数'-'ならば計算した値に-1を乗算する

投稿2022/12/01 14:31

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru0

2022/12/01 19:21

ものすごく分かりやすいです!試してみます! ありがとうございます。
guest

0

https://github.com/GaloisInc/minlibc/blob/master/atof.c
atof.cで検索したら出てきた。(負の値は入力できない気がするケド、ま、そのくらいは。)

投稿2022/12/01 14:25

matukeso

総合スコア1590

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru0

2022/12/01 23:00

atofを使うことを禁止されているのですよ…
matukeso

2022/12/01 23:49

ソースみて参考にすれば、って言ってるのよ。
jimbe

2022/12/02 02:54

ケーキを作る課題でケーキのレシピとか動画とか見たらダメ? という話ですね。 そのまんまは流石にダメでしょうが、何処までで『参考』と判断されるか…。 見ないで済むに越したことはないでしょうけど、『完全に詰まってヒントを~』なら1つのテではあると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問