Массив в C, не содержащий его значения

#arrays #c

#массивы #c

Вопрос:

Привет, я новичок здесь и новичок в программировании на C. (У меня есть несколько операторов печати для проверки значения на нескольких этапах). Это основано на пользовательском вводе, когда я тестирую со значениями, значение det[0] продолжает обновляться значением sol[2] . Почему это так???

Когда я печатаю значение det [0] в последней строке, его значение равно 9, что является моим значением sol [2]. Но в предыдущем коде перед ним есть (и должно быть) 2. Любое решение, которое я ввожу в sol[2], обновляет det[0] с тем же значением, когда я пытаюсь сохранить его значение.

 int main(void){
int det[8];
/*Equation 1*/
printf("Equation 1:nx: ");
scanf("%d", amp;det[0]);
printf("y: ");
scanf("%d", amp;det[1]);
printf("z: ");
scanf("%d", amp;det[2]);
/*Equation 2 */
printf("Equation 2:nx: ");
scanf("%d", amp;det[3]);
printf("y: ");
scanf("%d", amp;det[4]);
printf("z: ");
scanf("%d", amp;det[5]);
/*Equation 3 */
printf("Equation 3:nx: ");
scanf("%d", amp;det[6]);
printf("y: ");
scanf("%d", amp;det[7]);
printf("z: ");
scanf("%d", amp;det[8]);
/*solve for determinant*/
int sol[2];
int maindet1 = det[0]*((det[4]*det[8])-(det[7]*det[5]))-det[1]*((det[3]*det[8])-(det[6]*det[5])) det[2]*((det[3]*det[7])-(det[6]*det[4]));
printf("%dn", maindet1);
printf("SolutionsnSolution1: ");
scanf("%d", amp;sol[0]);
printf("Solution2: ");
scanf("%d", amp;sol[1]);
printf("Solution3: ");
scanf("%d", amp;sol[2]);
printf("%dn", maindet1);
printf("%d%d%d", sol[0],sol[1],sol[2]);
printf("%dn", maindet1);
/*find determinant x*/
int detx = sol[0]*((det[4]*det[8])-(det[7]*det[5]))-det[1]*((sol[1]*det[8])-(sol[2]*det[5])) det[2]*((sol[1]*det[7])-(sol[2]*det[4]));
printf("%dn", detx);
int dety = det[0];
printf("%dn", dety);
  

Комментарии:

1. Потому что нет sol[2] det[8] тоже нет).

2. Он основан на пользовательском вводе

3. Это не так. sol имеет 2 элемента. det имеет 8 . И они начинаются с индекса 0 .

4. Большое вам спасибо!!!

Ответ №1:

В C при объявлении массивов необходимо указывать количество элементов, а не максимальный индекс.

У вас det всего 8 элементов, а sol у вас всего 2 элемента, поэтому чтение или запись в det[8] и / или sol[2] не разрешены.

Выделите достаточное количество элементов типа int det[9]; и int sol[3]; для устранения ошибок.

Комментарии:

1. det[8] должен содержать 9 элементов. Это неверно?

2. det[8] является 9-м элементом, считая от det[0] . int det[8]; имеет только 8 элементов и, следовательно, в нем нет элемента det[8] .

3. Когда вы объявляете det[8] , det содержит 8 элементов. Первым является det[0], последним является det[7] .

4. Другими словами, он использует индексацию на основе нуля. [8] означает 0-7. И [2] означает 0-1.