C - разрыв цикла при вводе числа 0 в вектор - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть этот простой код, который вставляет число, введенное в терминал, в положение вектора в каждом цикле.

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, но я даже не смог приблизиться к желаемому результату.

1 Ответ

0 голосов
/ 09 ноября 2018
#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;
}

Разница между ними, кроме читабельности, заключается в том, что я буду увеличиваться на один дополнительный раз в первом. Также убедитесь, что инициализированы все переменные, которые вы объявляете (все ваши векторные элементы являются мусором стека, набор записей 0xFF присваивает им все -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...