2017-02-17 6 views
-1

私は自分のコードを実行しようとしているが、いつも私がコメントアウトした場合「のprintf(」%sの抵抗率は%fがあることを私が見つけたエラーコード0xc0000005でプログラムは、0xc0000005で

#include <stdio.h> 
#include <math.h> 

void calculate_resistance(char metal, int length, int diameter, float resistivity); 

int main() 
{ 
    int length, diameter; 
    float resistivity; 
    char metal; 
    printf("Enter the name of the metal: "); 
    scanf("%s", &metal); 
    printf("Enter the resistivity: "); 
    scanf("%f", &resistivity); 
    printf("Enter the length: "); 
    scanf("%d", &length); 
    printf("Enter the diameter: "); 
    scanf("%d", &diameter); 
    calculate_resistance(metal, length, diameter, resistivity); 
    return 0; 
} 

void calculate_resistance(char metal, int length, int diameter, float resistivity) 
{ 
    float radius = diameter/2; 
    float area_of_wire = (M_PI) * pow(radius,2) * length; 
    float resistance = resistivity * length/area_of_wire; 
    printf("Resistivity of %s is %f", metal, resistance); 
} 

で終わるされて」、金属でクラッシュ、抵抗); "または最後のscanfの後に任意のprintf関数は、エラーコード0xc0000005で

+1

'char metal;' 'char metal [96];'(適切なサイズ)、 'void metal_address(char metal、' - > void calculate_resistance(char metal []、 ' – BLUEPIXY

答えて

0
char metal; 
printf("Enter the name of the metal: "); 
scanf("%s", &metal); 

このコードは未定義の動作を起動するとクラッシュすることはありません。変数charに一連の文字を格納しようとしています。書式指定子%cまたは文字の配列のいずれかを使用する必要があります。

0

可変金属はcharです。これは1文字しか保持しません。あなたは文字の配列を保持する必要があります。もちろん100の

char metal[100]; 

あなたのケースのために良いではないかもしれないが、scanfprintfためchar%sを使用すると、問題が発生します。

2
char metal; 

単一charを宣言します。それはちょうど文字を格納することができます。文字のコレクションを保存する場合は、文字列を保存します。だから、その後

char metal[50]; /* Can store a max of 49 chars +1 for the \0 */ 

を使用し、配列の名前がす​​でにその最初の要素へのポインタに変換されるので

scanf("%s", &metal); 

から&を除外。セキュリティを強化するために、あなたは最大の文字数マイナス1(NUL-ターミネータ用に予約さ1のスペース)を示す書式指定子で長さ修飾子を防ぐことができます。

scanf("%49s", metal); 

また、あなたはいくつかのより多くのエラーチェックを提供する必要がありますし、 scanfのすべてが成功したかどうかを、その戻り値を調べて調べます。 配列(実際には、配列 "decay"のため最初の要素へのポインタ)ではなく、1文字を渡さないので、char metalchar metal[]またはchar* metalに変更することを忘れないでください。

+0

@MMありがとう。私の答えに提案を加えました –

関連する問題