Я не понимаю, почему следующий C-код приводит к следующему выводу.Есть ли у кого-нибудь представление о том, как происходит этот странный вывод моей программы на C?
Я хочу запрограммировать очередь массивов, и все, что я сделал allready, это написать функцию «enqueue_fct», которая добавляет новые элементы в очередь и «петли» массива.
Код:
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int enqueue_fct (int newElem_e, int * array_e, int last_e)
{
array_e [last_e] = newElem_e;
last_e = (last_e + 1) % MAX;
return (last_e);
}
int main (void)
{
int newElem = 0;
int array [MAX];
int last = 0;
int i;
for (i = 0; i < 20; i++)
{
last = enqueue_fct (newElem++, array, last);
printf ("array[%d] --> %d\n", last, array [last]);
fflush (stdout);
}
return (EXIT_SUCCESS);
}
Выход:
array[1] --> 0
array[2] --> -
array[3] --> 0
array[4] --> 0
array[0] --> 0
array[1] --> 1
array[2] --> 2
array[3] --> 3
array[4] --> 4
array[0] --> 5
array[1] --> 6
array[2] --> 7
array[3] --> 8
array[4] --> 9
array[0] --> 10
array[1] --> 11
array[2] --> 12
array[3] --> 13
array[4] --> 14
array[0] --> 15
Из пятой строки на выходе то, что я ожидал, но как насчет первых четырех строк? Я не имею в виду, почему он не начинается с «array [0]», понятно, почему это так. Но я не получаю, откуда приходит «0, -, 0, 0», прежде чем правильный вывод начнется со второго «цикла» массива.
Я новичок, так что если есть очень глупая ошибка в коде, быть снисходительным со мной и, пожалуйста, попытайтесь объяснить простыми словами, новичок может понять ;-)
Большое спасибо за ваш Помогите!
P. S .: Я использую Eclipse Neon.2 Release (4.6.2) с новейшим компилятором cygwin gcc на Windows 10 64bit.
EDIT:
Из-за 2501s ответ я исправил мой код и добавил -1 к утверждению PRINTF.
printf ("array[%d] --> %d\n", last, array [last-1]);
Теперь есть еще одна проблема, на выходе, что я не понимаю:
array[1] --> 0
array[2] --> 1
array[3] --> 2
array[4] --> 3
array[0] --> 1
array[1] --> 5
array[2] --> 6
array[3] --> 7
array[4] --> 8
array[0] --> 1
array[1] --> 10
array[2] --> 11
array[3] --> 12
array[4] --> 13
array[0] --> 1
array[1] --> 15
array[2] --> 16
array[3] --> 17
array[4] --> 18
array[0] --> 1
Почему массив [0] всегда '1', а не '4', '9', ' 14 ',' 19 '? Когда массив «последний» становится «0» в начале цикла»: К сожалению, как я уже сказал, я новичок ...
EDIT2:
Я получил это сам [last-1] "is" array [-1] ", который не является частью массива, поэтому '1' ist junk-data.
Все начинается полное программирование нуб ;-)
несвязанный .. не нужен 'fflush (стандартный вывод)'. 'printf' является буферизированным по строке, поэтому, когда он видит символ' \ n' (который у вас есть), он сбрасывает свой буфер на 'stdout'. – yano
Спасибо, яно, за информацию. Уменьшает ли производительность, когда я добавляю fflush (stdout), где это не нужно? –
hmm, хорошо вопрос. Вам нужно будет проверить сгенерированную сборку, но я подозреваю, что да, добавив 'fflush (stdout);' здесь добавятся дополнительные (ненужные) инструкции и, следовательно, более низкая производительность. Я не _think_ компилятор будет оптимизировать это (даже если он посмотрел на строку 'printf' и увидел' '\ n'' в конце, он должен был быть уверен, что ничего не было написано на' stdout' то время). Но я просто думаю вслух, кто-то умнее меня, мне нужно будет ответить. – yano