C 为什么我在我的";至于;循环说';中断';语句不在循环或开关中?

C 为什么我在我的";至于;循环说';中断';语句不在循环或开关中?,c,C,令人难以置信的编程新手,我在第12行收到一个错误,指出我的break语句不在循环或开关中。有人能解释一下我的错误在哪里以及如何修复它吗 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n1, n2, i, gcd, lcm; printf("Enter two positive integers: "); scanf("%d %d",

令人难以置信的编程新手,我在第12行收到一个错误,指出我的break语句不在循环或开关中。有人能解释一下我的错误在哪里以及如何修复它吗

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

int main()
{
    int n1, n2, i, gcd, lcm;

    printf("Enter two positive integers: ");
    scanf("%d %d",&n1,&n2);

    for(i=1; i <= n1 && i <= n2; ++i) {
        printf("Enter two positive integers: ");
        scanf("%d %d",&n1,&n2);
        if(n1==-1,n2==-1) break;
        // Checks if i is factor of both integers
        if(n1%i==0 && n2%i==0)
           gcd = i;
    }

    lcm = (n1*n2)/gcd;
    printf("The LCM of two numbers %d and %d is %d.", n1, n2, lcm);

    return 0;
}
#包括
#包括
#包括
int main()
{
int n1、n2、i、gcd、lcm;
printf(“输入两个正整数:”);
scanf(“%d%d”、&n1和&n2);
对于(i=1;i如果您“在第12行收到一个错误,说明我的break语句不在循环或开关中”,那么您可能有一个非常有缺陷的编译器,或者发布了错误的代码。该代码有一些问题,但错误位置的
break
不是其中之一

当您错误地放置了一些大括号时,通常会出现以下错误消息:

int i;
for (i = 0; i < 10; ++i)
    printf("%d\n", i);
    if (someCondition)
        break;

如果你想知道计算GCD的更有效的方法,你应该研究欧几里德算法。这可以定义为(对于非负
a
b
):

这意味着您可以使用递归函数:

int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}
或者,如果你强烈反对递归的话,可以使用迭代法:

int gcd(int a, int b) {
    while (b != 0) {
        int t = a % b;
        a = b;
        b = t;
    }
    return a;
}

if(n1=-1,n2=-1)
你能解释一下吗?如果你是个新手,Stack Overflow可能不是适合你的地方。有很多免费的教程资源,你应该花一些时间来学习。一旦你掌握了基本知识,你可能会发现这个网站对于特定的、经过充分研究的问题很有用。中断声明在第15行(不是12)-您确定我们正在查看与您相同的代码吗?第15行将其更改为-if(n1==-1&&n2=-1)break;此代码编译时没有错误。
int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}
int gcd(int a, int b) {
    while (b != 0) {
        int t = a % b;
        a = b;
        b = t;
    }
    return a;
}