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

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

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

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

Q&A

解決済

3回答

1812閲覧

アロー演算子のところで止まる

toutou

総合スコア2050

C

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

0グッド

0クリップ

投稿2017/01/04 13:07

編集2017/01/04 13:46

アロー演算子を少し学ぼうと

ここ

ここのサイトのサンプルをコンパイルし使ったところ36行目で動作が止まります。
windowsのエラーがでまして「問題が発生したのでプログラムが動作しなくなりました」とでます。
プログラム自体が動かなくなってる状態と読んでます。
コンパイラーは通るので入力ミスはないと見てます。
37行目にprintf("%1f",p->bl)を入れたところ4行に渡って数字が並びました。アドレスでもなさそうだしよくわかりません。
この4行にわたる謎の数字の意味、動作が止まるわけがわかるかた
どなたかご教授をお願いします。
アロー演算子はポインタにアクセスするものとして覚えてます。

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

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

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

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

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

yohhoy

2017/01/04 13:47

プログラム開始後の標準入力(≒キーボード入力)では、どのような文字/数値を入力しましたか?scanf関数は指定した書式以外の文字の扱いに強いクセがあります。
toutou

2017/01/04 13:59

コマンドプロンプトにnameとでたらnemeといれ、ageとでたら14とキーボード右の数字で入力し、 Height(cm) とでたら同じく右のでいれ、ここで確認用にprintfをすると数字がいっぱいでてエラーになります。
guest

回答3

0

ベストアンサー

件のところは実際に書いた通りですか?だとしたら、フォーマット指定子の指定間違いです。

C

1printf("%1f",p->bl)

ここは1(数字の1)ではなく、l(小文字のL)です。つまり、

C

1printf("%lf",p->bl)

が正しいです。

投稿2017/01/04 14:16

archiver

総合スコア1557

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

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

toutou

2017/01/04 14:30

練習のためコピペではなく、自分でかいたのが逆にあだになったようです。とりあえず書いてから意味をやるので気にしてなかったです。ありがとうございます。
maisumakun

2017/01/05 01:45

少々ややこしいのですが、可変長引数ではfloatはdoubleに変換されるので、printfで「%lf」と書く必要はありません(C99では追認されていますが)。一方、float*とdouble*がそのような変換を受けることはないので、scanfでは「%lf」と書く必要があります。
guest

0

書いてある通りの動作をしましたけど、

36行目で動作が止まります。

とは、具体的にどういう現象でしょうか?

あと、プログラムでgetsやscanfを使うなど、学習用に使うサイトとしてはあまり良くないと思います。

投稿2017/01/04 13:17

otn

総合スコア84557

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

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

toutou

2017/01/04 13:43

windowsのエラーがでまして「問題が発生したのでプログラムが動作しなくなりました」とでます。プログラム自体がクラッシュ?してプログラムが終了し、また起動させのを入力してくださいみたいな感じになります。
otn

2017/01/04 14:12

身長に数字でないものを入力して、0による除算が行われたのでしょう。 このプログラムではそういうことを一切考慮していません。 名前欄は、255バイト以下の文字列、それ以降は数字のみ(もちろん半角で)を入力してください。そうでないとプログラムバグに引っかかります。
toutou

2017/01/04 14:33

書式設定が間違ってたみたいです。お騒がせいたしました。ありがとうございます。また機会がありましたら勉強させてもらいます。
otn

2017/01/04 14:46

元のプログラムの書式指定は間違っていません。クラッシュの原因究明のために追加したあなたのコードが間違っていただけです。当然ですが、それはクラッシュの原因とは関係ありません。
guest

0

scanfの性質上、「入力待ちになる(見かけ上、動作が停止する)」というのは正しい挙動です。

投稿2017/01/04 13:16

HogeAnimalLover

総合スコア4830

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

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

toutou

2017/01/04 13:40

説明不足でした。windowsのエラーがでまして「問題が発生したのでプログラムが動作しなくなりました」とでます。scanfの動作については少しやって来ましたので多少わかってるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問