C .exe“停止工作”错误

时间:2014-02-03 01:26:20

标签: c runtime-error exe

这个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,所以我确信我错过了一些超级简单的东西。任何帮助表示赞赏。谢谢!

2 个答案:

答案 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的其他调用也进行了相同的更改。