如何保持比较整数对,直到用户输入没有数组的 0?

How to keep comparing pairs of integers until user inputs 0 without array?

这是一个检查互质对的程序。

我正在尝试编写一个程序来接收整数输入,直到用户输入 0,这很容易在数组的帮助下解决(我已经用数组完成了),因为只有一个值阅读和检查的时间。 使用数组很简单:

for(i = 0; i < n-1; i++)

然后比较 v[i]v[i+1]

不过,我正在尝试在没有数组的情况下应用这种精确检查算法, 读取两个值并比较它们,不知何故,循环仅在我多次输入 0 时结束,有时是两次,有时是三次。

#include <stdio.h>


int gcd1(int a, int b) //function containing Euclid's algorithm 
{
    while (b != 0)
    {
        int temp = a%b;

        a = b;
        b = temp;
    }


    return a;   
}


int main(int argc, char * argv[])
{

    int num1, num2; /* both of these vars would otherwise have a non-zero 
    value if I was using Try Nr.1 written in bold below was applied */

    int cate = 0, flag = 1;
    while(1)
    {
        scanf("%d %d", &num1, &num2);

        if(num1 == 0 && num2 == 0)
        {
        break;
        }

        if(gcd1(num1, num2) == 1) //check if pair is co-prime 
        {
            cate++;
        }

    }
        printf("%d\n", cate);


    return 0;
}

我尝试过的事情:

1 -

while(num1 != 0 || num2 != 0) /*using this inside the while(), also tried
changing the operator to &&, without a condition and a break inside the 
body*/

2 -

尝试了 while(flag != 0) 更改 if(num1 == 0 || num2 == 0),也将运算符更改为 &&,但它仍然是一样的,或者对我来说没有意义。

我需要的程序是在任何输入0处停止,例如:

25 27 12 24 11 13 0 

程序应该停在那里并告诉我有多少对是互质数,但它只会在我再输入 0 两次时停止。

What I need from the program is to stop at any input 0

scanf("%d %d", &num1, &num2); 在您输入 2 个数字之前一直处于阻塞状态

如果您想在第一个数字为 0 时停止而不必读取第二个数字,则必须执行 2 scanf

scanf("%d", &num1);

if(num1 == 0)
  break;

scanf("%d", &num2);

if(num2 == 0)
  break;

问题是,在你测试 15 和 63 之后,你把它们 扔掉了,所以 63 和 43 没有机会被测试。而不是总是阅读 两个个数字,只读一个,也只读一个,按照[=11] =]

    read a
    while ()
        read b
        gcd(a, b), etc
        a = b