следующий предложенный код:
- чисто компилирует
- включает комментарии к вопросу
- выполняет желаемую функциональность
- правильно проверяет наличие ошибок
- устранены «магические» числа 100 и 101
- , поскольку в коде OP нет отдельных функций для
read_vector()
и display_vector()
. Я не реализовывал их отдельно, однако для реализации * 1016 они должны быть тривиальными.
А теперь предложенный код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shuffle(int tab[], int size);
//int read_vector(int vec[], int size, int stop_value);
//void display_vector(const int vec[], int size);
#define MAX_VECTOR_LENGTH 100
int main( void )
{
int i;
int tab[ MAX_VECTOR_LENGTH ];
srand( (unsigned)time( NULL ) );
printf("Podaj pierwszy wektor:\n ");
for(i=0; i<MAX_VECTOR_LENGTH; i++)
{
printf( "%s", "enter vector entry or 0 to indicate done " );
if( scanf("%d", &tab[i]) != 1)
{
fprintf( stderr, "scanf failed\n");
exit( EXIT_FAILURE );
}
// implied else, scanf successful
if(tab[i]==0)
{
break;
}
}
shuffle(tab, i-1);
for(int j = 0; j < i; j++)
{
printf("%d ", tab[j]);
}
return 0;
}
void shuffle(int tab[], int size)
{
int i;
int j;
int x;
for(i=size; i>0; i--)
{
j = rand() % size;
x = tab[i];
tab[i]=tab[j];
tab[j]=x;
}
}
Типичный запуск программы приводит к:
Podaj pierwszy wektor:
enter vector entry or 0 to indicate done 1
enter vector entry or 0 to indicate done 2
enter vector entry or 0 to indicate done 3
enter vector entry or 0 to indicate done 4
enter vector entry or 0 to indicate done 5
enter vector entry or 0 to indicate done 6
enter vector entry or 0 to indicate done 7
enter vector entry or 0 to indicate done 0
1 6 5 3 4 7 2