C.exe“;“停止工作”;错误
这个C程序编译得很好,但是当我运行它时,在它请求第一次输入后,我收到一个windows错误,说“hw.exe已停止工作”C.exe“;“停止工作”;错误,c,runtime-error,exe,C,Runtime Error,Exe,这个C程序编译得很好,但是当我运行它时,在它请求第一次输入后,我收到一个windows错误,说“hw.exe已停止工作” #包括 #包括 内部主(空) { 内瓦拉、瓦布、瓦克; 双重结果; printf(“输入三角形的第一条边”); scanf(“%d”,valA); printf(“输入三角形的第二条边”); scanf(“%d”,valB); valC=(valA*valA)+(valB*valB); 结果=sqrt(valC); printf(“%d的平方根是:%f\n”,valC,res
#包括
#包括
内部主(空)
{
内瓦拉、瓦布、瓦克;
双重结果;
printf(“输入三角形的第一条边”);
scanf(“%d”,valA);
printf(“输入三角形的第二条边”);
scanf(“%d”,valB);
valC=(valA*valA)+(valB*valB);
结果=sqrt(valC);
printf(“%d的平方根是:%f\n”,valC,result);
返回0;
}
我对C非常陌生,所以我肯定我错过了一些非常简单的东西。感谢您的帮助。谢谢 您需要将地址传递给
scanf
:
scanf("%d", &valA);
您必须传递valA
的地址,然后scanf
将在该地址写入变量。您的代码传递valA
的值
同样,您对另一个调用
scanf
进行相同的更改,您需要将地址传递给scanf
:
scanf("%d", &valA);
您必须传递valA
的地址,然后scanf
将在该地址写入变量。您的代码传递valA
的值
同样地,您对另一个调用
scanf
进行相同的更改,在使用scanf
时,您必须使用&
(的地址)操作符。比如说,
scanf("%d", valA);
应该是
scanf("%d", &valA);
这是因为scanf
希望参数是指向从输入读取的变量的指针,而不是变量本身。指针是变量在内存中的位置scanf
使用此信息更改所提供参数的值
因此,当您将值传递给scanf时,它会将其用作指针,而不管您实际传递的是什么,因为C是相对不安全的类型。当您在
scanf
需要指针的情况下使用单位化变量时,scanf
尝试写入内存中的随机位置,导致未定义的行为。使用scanf
时,必须使用和(地址)运算符。比如说,
scanf("%d", valA);
应该是
scanf("%d", &valA);
这是因为scanf
希望参数是指向从输入读取的变量的指针,而不是变量本身。指针是变量在内存中的位置scanf
使用此信息更改所提供参数的值
因此,当您将值传递给scanf
时,它会将其用作指针,而不管您实际传递的是什么,因为C是相对不安全的类型。当您使用一个单位化变量时,scanf
需要一个指针,scanf
尝试写入内存中的随机位置,导致未定义的行为。打开comiler警告打开comiler警告后续问题:当我运行它时,它允许输入两个输入(感谢您的帮助)但在我有机会读取输出之前,程序就完成并关闭了。有没有办法改变这一点?只需将getchar()
添加到代码末尾,就在return
语句之前。这将阻止程序关闭,直到您按enter键。非常感谢!你帮了我大忙。再次感谢!一个后续问题:当我运行它时,它允许输入两个输入(感谢您的帮助),但是程序在我有机会读取输出之前完成并关闭。有没有办法改变这一点?只需将getchar()
添加到代码末尾,就在return
语句之前。这将阻止程序关闭,直到您按enter键。非常感谢!你帮了我大忙。再次感谢!