我一直在尝试运行我的代码,但始终以错误代码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);
}
我发现如果我注释掉&#34; printf(&#34;%s的电阻率是%f&#34;,金属,电阻);&#34;或者在最后一次扫描后的任何printf,它都不会崩溃,错误代码为0xC0000005
答案 0 :(得分:2)
3 2 1
声明单char metal;
。它只能存储一个字符。您想要存储一组字符,即字符串。所以使用
char
之后,请忽略char metal[50]; /* Can store a max of 49 chars +1 for the \0 */
&
因为数组的名称已经转换为指向其第一个元素的指针。为了增加安全性,可以在格式说明符中阻止长度修饰符,表示最大字符数减1(为NUL终止符保留1个空格):
scanf("%s", &metal);
此外,您应该提供更多错误检查,并通过查看其返回值来检查所有scanf("%49s", metal);
是否成功。
不要忘记在函数声明和定义中将scanf
更改为char metal
或char metal[]
,因为您没有传递单个字符,而是传递数组(实际上,指向它的指针)第一个元素因为数组“衰变”。
答案 1 :(得分:0)
char metal;
printf("Enter the name of the metal: ");
scanf("%s", &metal);
此代码调用未定义的行为。您正尝试在一个char
变量中存储字符序列。您应该使用%c
格式说明符或字符数组。
答案 2 :(得分:0)
可变金属是炭。这只包含1个字符。你需要持有一个字符数组。
char metal[100];
当然,100可能不适合您的情况,但对char
和%s
使用scanf
和printf
会导致问题。