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

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

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

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

Q&A

解決済

3回答

2955閲覧

C言語 エラーがわかりません。 読み込んだ実数値をそのまま表示するプログラムを作成

mercurian-teto

総合スコア75

C

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

0グッド

1クリップ

投稿2017/10/05 07:55

編集2017/10/05 08:24

visual studio2017 でC++コンソールアプリをテンプレートにしてC言語のプログラミングをしています。
読み込んだ実数値をそのまま表示するプログラムを作成しようとしています。

C

1#include "stdafx.h" 2 3 4 5int main() 6{ 7 double vx; 8 9 printf("実数を入力して下さい。\n"); 10 printf("実数vx=\n"); 11 scanf("%lf", &vx); 12 printf("あなたは%fと入力しましたね\n",&vx); 13 getchar(); 14 15 16}

C4819 ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 1行目

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 11行目

C4477 'printf' : 書式文字列 '%f' には、型 'double' の引数が必要ですが、可変個引数 1 は型 'double *' です
12行目

という風に出ています。
C4819にかんしては1行目はヘッダーの宣言しかしておりませんし、変な文字なんか存在しません。

C4996のエラーはscanf_sに試しましたが文字化けして
まともにプログラムが機能しません。

#include "stdafx.h" #define _CRT_SECURE_NO_WARNINGS

という風に

#define _CRT_SECURE_NO_WARNINGS ```もいれましたが、 先述のエラー画面が出てしまい効果がありません。 設定で 上部メニューバーの【プロジェクト】→【プロパティ】 上部セレクトボックス「構成」を【すべての構成】 左ペインの【構成プロパティ】→【C/C++】→【全般】 右ペインの「SDLチェック」を【いいえ】にを試しましたが、 文字化けは起こってしまいます C4477 'printf' : 書式文字列 '%f' には、型 'double' の引数が必要ですが、可変個引数 1 は型 'double *' です 12行目 エラーの文章を検索してみた結果が[これ](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13155220828?__ysp=5pu45byP5paH5a2X5YiXICclZicg44Gr44Gv44CB5Z6LICdkb3VibGUnIOOBruW8leaVsOOBjOW%2FheimgeOBp%2BOBmeOBjOOAgeWPr%2BWkieWAi%2BW8leaVsCAxIOOBr%2BWeiyAnZG91YmxlICon)なのですが、 scanfの因数の&のつけ忘れ等もしておりません。(半角で入力しています) 調べても調べても解決に至る情報がありません。 だれか解決策をお願いします。 --------------------------------------------------- 編集しました ```C #include "stdafx.h" int main() { double vx; printf("実数を入力して下さい。\n"); printf("実数vx=\n"); scanf_s("%lf", &vx); printf("あなたは%fと入力しましたね\n", vx); getchar(); }

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

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

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

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

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

guest

回答3

0

ベストアンサー

文字化けする

ファイルをShift-JIS形式で保存してみてください。参考

C4819 ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。

データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 1行目

インクルードしたヘッダファイルをUnicode形式で保存するのもありです。
が、割と徒労に終わることが多いので、握りつぶす方法もあげときます。

C

1#pragma warning(disable: 4819) 2#include "stdafx.h"

投稿2017/10/05 08:52

LouiS0616

総合スコア35660

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

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

mercurian-teto

2017/10/05 22:59

shift-jis形式と#pragma warning(disable: 4819)、 2つの方法を同時に試すと文字化けが起こらないようになりました。 ありがとうございました。
guest

0

プロジェクトのプロパティを開いて、C/C++のコマンドラインの項目で「追加のオプション」に

/D _CRT_SECURE_NO_WARNINGS

を追加すればC4996のエラーは消えます。(英語のエラー・メッセージを読めばわかります。scanfの代わりにscanf_sを使うことを検討しろ、または、_CRT_SECURE_NO_WARNINGSを定義しろ、ということです)

それから、ヘッダーファイルがstdafx.hしかありませんが、scanfやprintfを使うのならヘッダーをインクルードして使わないといけません。scanfやprintfのヘッダーはstdio.hなので

C

1#include <stdio.h>

を追記してください。(stdafx.hの中でインクルードしているのならOKですが。)

関数は、プロトタイプ宣言しないと引数や戻り値はint型と暗黙の了解でコンパイルされてしまうからです。文字化けするのはそのせいだと思います。

投稿2017/10/05 08:33

編集2017/10/05 08:43
PineMatsu

総合スコア3579

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

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

guest

0

C4477 'printf' : 書式文字列 '%f' には、型 'double' の引数が必要ですが、可変個引数 1 は型 'double *' です

こちらはエラーメッセージのとおりで、printfにはvxをそのまま渡せばいいだけで、わざわざ&vxとする必要はありません。

投稿2017/10/05 07:57

maisumakun

総合スコア145183

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

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

mercurian-teto

2017/10/05 08:28

回答ありがとうございます。 上の編集しましたを参考にしてください。実行すると 螳滓焚繧貞・蜉帙@縺ヲ荳九&縺・€・n螳滓焚vx= といった文字化けが発生します。どこを修正すればいいのかわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問