首页 > 解决方案 > C - 在向量中输入数字 0 时中断 while 循环

问题描述

我有这个简单的代码,它将终端中输入的数字插入到每个循环的向量位置。

int main() 
{
    int vector[5];
    int i;

    for (i = 0; i < 5; i++)
    {
        printf("Number: ");
        scanf_s("%d", &vector[i]);
    }

    system("pause");
    return 0;
}

我的问题是如何在输入数字 0 后立即中断循环。

例如,假设我的向量有 50 个位置,我输入 10 个正整数位置,现在我希望循环在我输入零时结束,其余 40 个位置保持空白。

我想它与while循环有关,但我什至无法接近我想要的结果。

标签: cloopsfor-loopwhile-loop

解决方案


#define MAX_SIZE (5)

int main() 
{
    int vector[MAX_SIZE] = {0};
    int i;

    memset(vector, 0xFF, sizeof(vector)); //sets all vector[i] to -1 on init;
    for (i = 0; (i < MAX_SIZE) && (i?vector[i-1]:1) ; i++) //you can add the condition to break from the for loop here.  This is more complicated but its just for demonstration.
    {
        printf("Number: ");
        scanf_s("%d", &vector[i]);
    }

    system("pause");
    return 0;
}

上面的示例代码演示了使用 for 循环条件表达式作为中断循环的方法。由于您构建循环的方式,其中的三元组可防止 i=0 导致索引越界的情况。更好/更易读的方式如下:

#define MAX_SIZE (5)

int main() 
{
    int vector[MAX_SIZE] = {0};
    int i;

    memset(vector, 0xFF, sizeof(vector)); //sets all vector[i] to -1 on init;

    for (i = 0; i < MAX_SIZE; i++)
    {
        printf("Number: %d\n", i);
        scanf_s("%d", &vector[i]);
        if(vector[i] == 0)
        {
            break;
        }
    }

    //system("pause");
    printf("Broke the loop when i was %d\n", i);
    return 0;
}

除了可读性之外,两者之间的区别在于 i 将在第一个中增加一次。此外,请确保初始化您声明的所有变量(所有向量元素都是堆栈垃圾,0xFF memset 将它们全部分配给-1)。


推荐阅读