2017-09-07 16 views
0

私はC言語を使用して非常に簡単なプログラムをコーディングしようとしています。 私はそれをコンパイルするためにVisual StudioとCodeBlocksを使用しています。あるコンパイラでは動作しますが、他のコンパイラでは動作しません

しかし、このコード:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    float a; 

    printf("Give a number: \n"); 
    scanf("%f", &a); 
    float b = a * 2; 
    printf("The result is: %f", b); 

} 

それは、Visual Studioでコードブロックを使用して動作しますが、ありません。 私にヒントを教えてください。

Btw、私はちょうどコーディングを学び始めました。

EDIT:重大度コード説明プロジェクトファイル行抑制状態 エラーC4996 'scanf':この関数または変数は安全でない可能性があります。代わりにscanf_sの使用を検討してください。廃止予定を無効にするには、_CRT_SECURE_NO_WARNINGSを使用してください。詳細については、オンラインヘルプを参照してください。変数c:¥users¥PinkP¥documents¥visual studio 2015¥projects¥variables¥variables.c 32

+4

VSはエラーではなく、警告を表示します。コードはまだ動作するはずです。 – dasblinkenlight

+0

実行されません、それは私に乱数のみを与えます。 – PinkP

+0

'scanf'の代わりに[' scanf_s'](https://msdn.microsoft.com/en-us/library/w40768et.aspx)を使用することをお勧めします。 –

答えて

1

scanf("%f", &a);は、Visual Studioコンパイラでは安全ではないとみなされています。 (ISOにはそのような計画はありませんが)実際には、あなたの記憶を台無しにする可能性は低いので、実際にはscanf_sを使用してください。

コンパイラのメッセージ(#define_CRT_SECURE_NO_WARNINGS)に従うことで、この警告を無効にすることができます。

ここの皮肉なことに、コンパイラはあなたの非標準のmain()の機能をちょっとしたことなく許可します! C99を含むので必要とされていたよりポータブル

int main()

を使用することを検討してください。

+0

main()とint main()を使用するコンパイラの違いは何ですか? – PinkP

+2

@pinkPどちらのコンパイラでもほとんど違いはありません。しかし、Cの標準では 'main()'は許可されていないので、非標準的なCを書くのは非常に不必要になります。Cと一緒になると、標準に準拠すればもっと簡単になります。あなたは少なくともあなたのためにスタックオーバーフローで永遠に警告されることはありません。 – Persixty

+0

@PinkP:C99標準より前のバージョンでは、関数定義に暗黙的な 'int'型の入力を許可するために何も使われませんでした。これはC99標準で変更され、今やすべての関数*は明示的に型指定されなければなりません。 –

0

Visual Studio 2015では、廃止予定の機能が2010よりも厳しくなっています。

Visual Studio 2010のようにscanfの使用について何かする必要があることを通知するのではなく、今すぐあなたに何かをさせる必要があります。

scanf_sに切り替えるか、_CRT_SECURE_NO_WARNINGSを使用する必要があります。

関連する問題