C 当while循环在某个条件下为false时,如何中断该循环

C 当while循环在某个条件下为false时,如何中断该循环,c,while-loop,integer,C,While Loop,Integer,我试着做一个程序,如果我输入一个整数,程序会找出较大的数字,然后用较小的数字减去它。这部分,我明白了 问题是,无限循环部分 我试着让输入两个整数用while循环继续打印,当至少输入一个字符时,中断 例如,如果我输入2@,它将中断 但是我找不到写作的地方来打破在代码中,因此每当我输入一个字符时,它将继续创建一个无限循环 有没有办法在这个代码中创建一个中断?我谦恭地寻求建议 以下是我无法将中断的代码 (顺便说一句,我之所以在while assizeof(I)==4 | | sizeof(j)==4中

我试着做一个程序,如果我输入一个整数,程序会找出较大的数字,然后用较小的数字减去它。这部分,我明白了

问题是,无限循环部分

我试着让
输入两个整数
用while循环继续打印,当至少输入一个字符时,
中断

例如,如果我输入
2@
,它将中断

但是我找不到写作的地方来打破
在代码中,因此每当我输入一个字符时,它将继续创建一个无限循环

有没有办法在这个代码中创建一个中断?我谦恭地寻求建议

以下是我无法将
中断的代码
(顺便说一句,我之所以在while as
sizeof(I)==4 | | sizeof(j)==4
中设置该条件,是为了使它只输入一个整数,因为整数的大小是4)

这里有一个代码,我去掉了
sizeof
并使用了
while(1)
,虽然
中断
不起作用这一事实没有太大变化

int main()
{   
    int i, j;
    int result;

    while (1){
            printf("type in two integers : ");
            scanf("%d %d", &i, &j);
            if (i < j) {
                result = j - i;
            }
            else if (j < i) {
                result = i - j;
            }

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

    return 0;
}
intmain()
{   
int i,j;
int结果;
而(1){
printf(“输入两个整数:”);
scanf(“%d%d”、&i和&j);
if(i
您不能使用
sizeof(i)
执行运行时检查!这是一个编译时间常量,在您的情况下(32位整数)将始终计算为4

为了检查是否给出了两个有效整数,您可以检查
scanf
函数的返回值(它给出了成功扫描的字段数):

#包括
int main()
{
int i,j;
int结果;
而(1){
printf(“输入两个整数:”);
if(scanf(“%d%d”,&i,&j)!=2)break;//如果我们没有得到两个整数,请在这里中断
if(i

请随时询问fir进一步的澄清和/或解释。

放弃“内部有中断的无限循环”的整个概念。
根据
scanf()
的返回值为循环设置一个条件,这实际上就是它的设计目的

#include <stdio.h>

int main()
{   
    /* always init everything */
    int i=0, j=0;
    int result=0;

    printf("type in two integers : ");
    while (2==scanf("%d %d", &i, &j))
    {
        if (i < j) {
            result = j - i;
        }
        else /* removed second if, to have a meaningful result for i==j */
        {
            result = i - j;
        }

        printf("%d\n", result);
        printf("type in two integers : ");            
    }

    return 0;
}

尝试
while(2==scanf(“%d%d”,&i,&j))
。如果我正确理解了你的问题,应该会有帮助。哇!非常感谢你。如果不麻烦的话,请您对
scanf(“%d%d”、&i和&j)!=2
。更具体地说,关于为什么它是
2
?这是因为true&true==1&1==1+1==2吗?正如我所说,
scanf
返回它成功读取的值的数量。如果输入
12
,它将读取两个整数,并返回
2
(成功);如果输入
1$
,它将只读取一个整数并返回
1
(失败);同样,如果您输入“&2”,它将返回
0
。但是请注意:使用
scanf
功能有很多危险!如果您输入
2 0.1
,它将成功读取两个整数(
2
0
),但下一轮将失败-因为
字符留在输入缓冲区中。感谢您对我的代码以及替代代码的具体评论!另外,我想在(…)
时在
do{…}上试一试。如果不麻烦的话,代码是否可以使用这个?所以如果我写的是对的,我可以匹配吗?我的荣幸。事实证明,它没有我想象的那么优雅,因为我无法避免额外的
if
来获得漂亮的输出。我仍然比
while
选项更喜欢它,因为我更喜欢额外但直接的
if
而不是加倍输出行。在我看来/以我的经验,输出行比逻辑(一旦测试)更有可能被更改。现在,你的
do while
代码类似吗?注意,我同意@AdrianMole对另一个答案的评论警告,这绝对适用于我的答案。有关scanf陷阱的更多信息,请参阅这篇非常有趣的文章:
int main()
{   
    int i, j;
    int result;

    while (1){
            printf("type in two integers : ");
            scanf("%d %d", &i, &j);
            if (i < j) {
                result = j - i;
            }
            else if (j < i) {
                result = i - j;
            }

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

    return 0;
}
#include <stdio.h>

int main()
{   
    /* always init everything */
    int i=0, j=0;
    int result=0;

    printf("type in two integers : ");
    while (2==scanf("%d %d", &i, &j))
    {
        if (i < j) {
            result = j - i;
        }
        else /* removed second if, to have a meaningful result for i==j */
        {
            result = i - j;
        }

        printf("%d\n", result);
        printf("type in two integers : ");            
    }

    return 0;
}
#include <stdio.h>

int main()
{   
    /* always init everything */
    int i=0, j=0;
    int result=0;
    int iScanned=0;

    do 
    {
        printf("type in two integers : ");
        iScanned=scanf("%d %d", &i, &j); /* keep the return value for loop */

        if (i < j) {
            result = j - i;
        }
        else /* removed second if, to have a meaningful result for i==j */
        {
            result = i - j;
        }

        if(2==iScanned) printf("%d\n", result); /* if to avoid awkward last output */
    } while (2==iScanned);

    return 0;
}