Возможно, что-то вроде этого:
#include <stdio.h>
#include <stdlib.h>
/* An arbitrary starting size.
Should be close to what you expect to use, but not really that important */
#define INIT_ARRAY_SIZE 8
int array_size = INIT_ARRAY_SIZE;
int array_index = 0;
array = malloc(array_size * sizeof(int));
void array_push(int value) {
array[array_index] = value;
array_index++;
if(array_index >= array_size) {
array_size *= 2;
array = realloc(array, array_size * sizeof(int));
}
}
int main(int argc, char *argv[]) {
int shouldBreak = 0;
int val;
while (!shouldBreak) {
scanf("%d", &val);
shouldBreak = (val == 0);
array_push(val);
}
}
Это вызовет номера и сохранит их в массиве, как вы просили. Он будет завершен при передаче с заданным значением 0.
Вы создаете функцию доступа array_push
для добавления в ваш массив, вы вызываете realloc
из этой функции, когда вы пробегаете пробел. Каждый раз вы удваиваете количество выделенного пространства. В лучшем случае вы выделите вдвое больше необходимой вам памяти, в худшем случае вы будете называть realloc
log n раз, где n - окончательный размер предполагаемого массива.
Вы также можете проверить наличие ошибки после вызова malloc и realloc. Я не сделал этого выше.
Внешний ключ определяет отношения родитель-потомок между двумя таблицами. Первичный ключ в родительской таблице - это внешний ключ в строках дочерней таблицы (до n).
Теперь, если этот первичный ключ в родительской таблице получает UPDATE, срабатывает ПРАВИЛО ОБНОВЛЕНИЯ. Либо все дочерние строки также обновляются, либо установлен в NULL или что-то еще. Однако лучше всего иметь первичный ключ, который НИКОГДА не меняется (фиксированный идентификатор или что-то в этом роде), так что это менее важное правило.
Более важным является правило УДАЛИТЬ - что, если родительская строка удалена (например, Порядок удаляется)? Вы также можете удалить все дочерние строки (все элементы строки заказа) с помощью CASCADE DELETE, или вы можете установить для их внешнего ключа значение NULL (у них больше нет родителя) - это полностью зависит от вашего конкретного сценария.
В сценарии заказа / строки заказа
В поле внешнего ключа может храниться только null или значение, определенное полем первичного ключа.
Если вы попытаетесь изменить значение внешнего ключа на что-то, не определенное первичным ключом, вы будете получить ошибку. Аналогичным образом, если вы попытаетесь изменить первичный ключ, который имеет зависимости внешнего ключа, вы получите сообщение об ошибке ... в качестве примера
Models table
modelID (primary key) model
1 Jeep
2 Ford
Customer table
id customer modelID (foreign key of Models.modelID)
1 1234 1
2 2345 2
Если вы попытаетесь удалить запись Jeep из Models, вы получите сообщение об ошибке, потому что у клиента 1234 установлен идентификатор модели к 1, и это если внешний ключ. Точно так же, если я попытаюсь обновить клиента 1234, чтобы он имел идентификатор модели 3, он выдаст ошибку, потому что в таблице моделей нет первичного ключа со значением 3
Похоже, что документация находится в диалоговом окне отношений внешних ключей .
Кстати, справка F1 отлично работала у меня в SSMS 2008. Я сразу перешел на страницу выше (после того, как я искал Конечно же, полчаса онлайн).