关于#c语言#的问题,请各位专家解答!

为什么这段代码无法正常运行



```c
#include <stdio.h>
#include<math.h>
int square(int x1,int x2,int x3,int y1,int y2,int y3)
{
int L1, L2, L3,res;

L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
if (L1 + L2 > L3&& L1 - L2 < L3)
{
if (L1 == L2 || L1 == L3 || L2 == L3)
 res++;}

return res;
}
int main(){
    int n =0,res=0,j,i,k;
    scanf("%d",&n);
    if(n<3){
        printf("error");
    }
    int x[n],y[n];
    for(int i = 0;i<n;i++){
        scanf("%d %d",x[i],y[i]);
    }
    for(int i = 0;i<n;i++){
        j=i;
       while(j!=n){
           k=j;
           while(k!=n){
               res = res+square(x[i],y[i],x[j],y[j],x[k],y[k]);
               k++;
           }
           j++;
       }
    }
    printf("%d",res);
}

```

您好,以下是修正后的代码,您试试:

#include <stdio.h>
#include <math.h>

int square(int x1, int x2, int x3, int y1, int y2, int y3) {
    int L1, L2, L3, res = 0;

    L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
    L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

    if (L1 + L2 > L3 && L1 + L3 > L2 && L2 + L3 > L1) {
        if (L1 == L2 || L1 == L3 || L2 == L3)
            res++;
    }

    return res;
}

int main() {
    int n = 0, res = 0;
    scanf("%d", &n);

    if (n < 3) {
        printf("error");
        return 0;  // 如果n小于3,直接退出程序
    }

    int x[n], y[n];
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &x[i], &y[i]);
    }

    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = j + 1; k < n; k++) {
                res += square(x[i], y[i], x[j], y[j], x[k], y[k]);
            }
        }
    }

    printf("%d", res);
    return 0;
}

以下是修改内容的简要说明:

  1. square 函数中初始化变量 res 为0。
  2. square 函数中增加了额外的检查,以确保三条线段能够构成一个三角形。
  3. 在主函数中,在打印 "error" 后添加了 return 0; 语句,以在 n 小于3时退出程序。
  4. scanf 函数中,在 x[i]y[i] 前添加了 & 符号,以正确读取值到数组中。
  5. 将内部的 while 循环改为了 for 循环,以提高可读性和正确性。
  6. 调整了循环索引,以确保每个点的三元组只被考虑一次。
#include <stdio.h>
#include <math.h>

int square(int x1, int x2, int x3, int y1, int y2, int y3) {
    int L1, L2, L3, res;
   
    L1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    L2 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
    L3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
   
    if (L1 + L2 > L3 && L1 - L2 < L3) {
        if (L1 == L2 || L1 == L3 || L2 == L3) {
            res = 1;
        } else {
            res = 0;
        }
    } else {
        res = 0;
    }
   
    return res;
}

int main() {
    int n, res = 0, j, i, k;
    scanf("%d", &n);
   
    if (n < 3) {
        printf("error");
        return 0;
    }
   
    int x[n], y[n];
   
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &x[i], &y[i]);
    }
   
    for (int i = 0; i < n; i++) {
        j = i;
       
        while (j != n) {
            k = j;
           
            while (k != n) {
                res = res + square(x[i], y[i], x[j], y[j], x[k], y[k]);
                k++;
            }
           
            j++;
        }
    }
   
    printf("%d", res);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^