大佬教程收集整理的这篇文章主要介绍了为什么我会收到此代码的运行时错误? (由 makefile 通过 linux 运行的 C 代码),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
第一次用 C 编码,来自 C++。我试图制作一个解决 K-Neighbors 问题的程序。假设所有位置都是 2D 平面中的点,当给定 n 个城市的列表时,它应该返回最近的 k 个城市。经过多次调试,它终于编译并运行了,但返回了一个运行时错误。我无法读取错误代码,所以我不明白发生了什么。我做错了什么?
#include <stdio.h> //for printf
#include <stdlib.h> //for malloc,free
#include <math.h> //for sqrt,pow
struct City {
double x;
double y;
double distance;
};
double get_distance(double x1,double y1,double x2,double y2){
return sqrt(pow(x2 - x1,2) + pow(y2- y1,2));
}
voID make_List(struct City arr[]){
arr[0].x = 0; arr[0].y = 0; arr[0].distance = 0;
arr[1].x = 110; arr[1].y = 150; arr[1].distance = 0;
arr[2].x = 140; arr[2].y = 30; arr[2].distance = 0;
arr[3].x = 91; arr[3].y = 70; arr[3].distance = 0;
arr[4].x = 172; arr[4].y = 161; arr[4].distance = 0;
arr[5].x = 62; arr[5].y = 160; arr[5].distance = 0;
arr[6].x = 16; arr[6].y = 163; arr[6].distance = 0;
arr[7].x = 161; arr[7].y = 40; arr[7].distance = 0;
arr[8].x = 162; arr[8].y = 20; arr[8].distance = 0;
arr[9].x = 61; arr[9].y = 117; arr[9].distance = 0;
}
//time complexity O(n^2)
voID insertion_sort(double arr[],int n){
int i,key,j;
for(i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while(j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int array_size = 10;
struct City arr[array_size];
double distances[array_size];
make_List(arr);
//Find distance from me and add to sorted distances
for(int i = 0; i < array_size; i++){
arr[i].distance = get_distance(arr[0].x,arr[0].y,arr[i].x,arr[i].y);
insertion_sort(distances,array_sizE);
}
//Print the distances
int k = 5;
double temp = 0;
printf("\nThe %d closest distances are:\n",k);
if(k < array_sizE){
for(int i = 1; i < k; i++){
temp = distances[i];
printf("%f\n",temp);
}
}
return 0;
}
我认为从 C++ 过渡到 C 可能比其他方式更难(我就是这样做的)。
下一段对原始答案略有编辑。感谢 John Bode 纠正我关于 C99 引入可变长度数组的问题
最初,在 C 中使用 [ ] 的数组不能像在 C++ 中那样使用变量作为大小来声明。正如有人在评论中指出的那样,“从 C99 开始,可以使用运行时变量声明数组,尽管支持不充分,并且该功能在 C11 中成为可选的。它们被称为可变长度数组并且可能很有用。”因此,这意味着它不适合您,因为您当前的编程环境设置不支持它。
如果您想尝试弄清楚如何让您的编程环境支持这一点,请继续。我个人不知道我的头顶。对于你在这个问题的背景下,我认为这有点矫枉过正。最简单的就是使用宏。删除 int array_size = 10;
并将其定义为 main 正上方的宏,如 #define array_size 10
。 (顺便说一句,我总是喜欢将宏全部大写,例如 ARRAY_SIZE,但您不必这样做)。出于您的目的,读者在此上下文中对宏的摘要解释是,在这里它将充当文本替换。因此,在写入 array_size 的任何地方,它都相当于您手动输入数字 10,或者您给它的任意大小。
以上是大佬教程为你收集整理的为什么我会收到此代码的运行时错误? (由 makefile 通过 linux 运行的 C 代码)全部内容,希望文章能够帮你解决为什么我会收到此代码的运行时错误? (由 makefile 通过 linux 运行的 C 代码)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。