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

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

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

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

3回答

1263閲覧

ポインタの表示で型が合いません

mememe0331

総合スコア55

C

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

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

1クリップ

投稿2020/06/09 09:07

編集2020/06/09 10:22

前提・実現したいこと

実数xを入力して、整数部と小数部を表示するプログラムを作りたいです。

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

ポインタ関連のエラーだということは理解できるのですが、どこを治せばエラーを取り除けるのか分かりません。

ここがダメ!これ!のような短い回答でも頂けると幸いです。

(17): warning C4477: 'printf' : 書式文字列 '%f' には、型 'double' の引数が必要です が、可変個引数 1 は型 'double *' です``` ### 該当のソースコード ```C言語 #include <stdio.h> void divide_Real(double x,int *p_i,double *p_f); int main(void) { double x; int p_i=0; double p_f=0; printf("入力:"); scanf("%lf", &x); divide_Real(x,&p_i,&p_f); printf("整数部:%d\n",&p_i); printf("小数部:%f\n",&p_f); return 0; } void divide_Real(double x,int *p_i,double *p_f) { *p_i = (int) x; *p_f = x - *p_i; }

試したこと

すみません。どこを治せばいいか分からず、試せてません。

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

サクラエディタ、コマンドプロンプト for VS 2019を使用しています。

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

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

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

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

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

guest

回答3

0

ポインタの使い方を間違えています。
ポインターを理解していないのなら、関数を使わないで書いてみましょう。

投稿2020/06/09 09:30

otn

総合スコア84559

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

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

mememe0331

2020/06/09 10:09

otn様、回答ありがとうございます! もっとポインタについて勉強します。
guest

0

int *p_i=0;

ポインタの宣言になってます
変数のナカミを格納するための領域をどっかで確保してやる必要があります
そして、そのアドレスを代入してやりましょう

投稿2020/06/09 09:10

編集2020/06/09 09:12
y_waiwai

総合スコア87774

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

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

mememe0331

2020/06/09 10:10

y_waiwai様、ご回答ありがとうございます! *の意味が分かってなかったです。ご指摘ありがとうございます。
guest

0

自己解決

#include <stdio.h>

void divide_Real(double x,int *p_i,double *p_f);

int main(void)
{
double x;
int p_i=0;
double p_f=0;

printf("入力:"); scanf("%lf", &x); divide_Real(x,&p_i,&p_f); printf("整数部:%d\n",p_i); printf("小数部:%f\n",p_f); return 0;

}

void divide_Real(double x,int *p_i,double *p_f)
{
*p_i = (int) x;
*p_f = x - *p_i;
}

printf()内の「&」→「変数名」で出来ました。
・&が付くとアドレスが表示。
・変数名だと、代入された値が表示。
が分かってなかったです。

ご回答頂けた皆様、ありがとうございました!

投稿2020/06/09 10:24

mememe0331

総合スコア55

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

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

hidezzz

2020/06/09 10:44

1点だけ指摘すると、main()関数内の変数「p_i」「p_f」は「i」「f」と名前を変えたほうが良いと思います。(「p_」はポインタ変数であることを示すために付けていたと思いますが、もうポインタではなく実体の変数なので) divid_Real()関数内は逆にポインタ変数なので「p_i」「p_f」のままで良いです。
mememe0331

2020/06/09 10:49

hidezzz様、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問