我正在尝试计算使用 scanf 输入的 3 个变量相乘的结果,但是在输入 Duration 变量时,它给了我一个段错误。
#include <stdio.h>
int main(){
float rate;
rate = 0.06;
int duration;
float principal_amount;
float total_interest;
printf("Enter duration in years:");
scanf("%d", duration);
printf("Enter principal amount of loan:");
scanf("%f", principal_amount);
total_interest = principal_amount * duration * rate;
printf("Output: %f", total_interest)
return 0;
}
最佳答案
duration
的类型为 int
,但您想要一个整数指针作为 scanf
的参数,
scanf("%d", &duration);
scanf
的工作原理是将适当的字节放入内存中的某个位置,以便在 scanf
完成后产生副作用,提供内存中指针地址处的值将是从输入读取的值。由于您希望 duration
本身包含该值,因此意味着您希望将其读入 duration
的内存位置,其语法表示为 &duration
(“持续时间
的地址”)。
段错误的原因是整数duration
未初始化,因此在程序启动时可能包含一些(未定义的)值。就尝试通过整数到达内存地址而言,任何整数都与其他整数一样好,因此 C 运行时很乐意尝试将 duration
内的任何值视为一个内存地址,但您的程序无权更改它的内存地址。 (很多情况下它实际上是0
,这相当于尝试将一些数据写入NULL
,但这并不能严格保证,甚至是理论上来说,duration
可以用一个指向有效内存位置的整数随机初始化……这可能会导致更严重的错误,因为将 scanf
的结果写入该位置不会产生任何可见的错误或段错误)。
关于c - 为什么使用 scanf 输入整数时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931529/