#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.