这个C程序编译得很好,但是当我运行它,在它要求第一个输入后,我得到一个Windows错误,说“hw.exe已经停止工作”。
#include <stdio.h>
#include <math.h>
int main(void)
{
int valA, valB, valC;
double result;
printf("Enter the first side of the triangle.");
scanf("%d", valA);
printf("Enter the second side of the triangle.");
scanf("%d", valB);
valC = (valA * valA) + (valB * valB);
result = sqrt(valC);
printf("The square root of %d is: %f\n", valC, result);
return 0;
}
我非常喜欢C,所以我确信我错过了一些超级简单的东西。任何帮助表示赞赏。谢谢!
答案 0 :(得分:3)
使用&
时,您必须使用scanf
(address-of)运算符。例如,
scanf("%d", valA);
应该是
scanf("%d", &valA);
这是因为scanf
期望参数是您从输入读取的变量的指针,而不是变量本身。指针是内存中变量的位置。 scanf
使用此信息更改您提供的参数的值。
因此,当您将值传递给scanf
时,它会将其用作指针,而不管您实际传递的是什么,因为C相对类型不安全。当您使用scanf
期望指针的整数变量时,scanf
会尝试写入内存中的随机位置,从而导致未定义的行为。
答案 1 :(得分:1)
您需要将地址传递给scanf
:
scanf("%d", &valA);
您必须传递valA
的地址,然后scanf
将写入该地址的变量。您的代码会传递valA
的值。
同样,您对scanf
的其他调用也进行了相同的更改。