数组随机排序

array sorting in randomly

我有下面的代码,我希望它应该从文件中读取文本,将单词存储在数组中,然后以随机顺序打印出来。最终数组是 int,但应该是 char,它没有给我正确的答案。

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    char message[10][150], buffer[150];
    int i = 0;
    int cntr = 9;
    char freeArray[9];

    srand(time(NULL));
    freeArray[i] = rand() % cntr;
    FILE *file_in;

    file_in = fopen("test.txt", "r");

    while (fgets(buffer, 150, file_in))
    {
        i = rand() % cntr;
        strcpy(message[freeArray[i]], buffer);
    }

    while (cntr >= 0)
    {
        i = rand() % cntr;
        strcpy(message[freeArray[i]], buffer);
        freeArray[i] = freeArray[cntr--];
        printf("%s", freeArray[i]);
    }

    return 0;
}

我有替代代码,但这个给我的文本没有随机播放。

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    /*declare and initialise variable*/
    char message[10][150],buffer[150];
    int i=0;
    int j;
    srand(time(NULL));
    FILE *file_in;
    file_in=fopen("test.txt", "r");
    /*stores and prints the data from the string*/
    while(fgets(buffer,150,file_in)){
        strcpy(message[i],buffer);

    }
    while(i < 10)
{
  j = rand() % 10;
  printf("%s\n",message[j]);
  i++;
}

    return 0;
The following is to answer the question given in an answer block

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <time.h>

#define MAX_MESSAGES (10)
#define MAX_MESSAGE_LEN (150)

static char message[MAX_MESSAGES][MAX_MESSAGE_LEN] = {{'[=10=]'}};
static char buffer[MAX_MESSAGE_LEN] = {'[=10=]'};
static char t[MAX_MESSAGE_LEN] = {'[=10=]'};

int main()
{
    /*declare and initialise variable*/
    int i=0;
    int j = 0;
    FILE *file_in = NULL;

    if( NULL == (file_in=fopen("test.txt", "r") ) )
    { // then, fopen failed
        perror("fopen for test.txt failed");
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    /*stores, sorts and prints the data from the string*/
    i = 0;
    while( (i<10) && (fgets(buffer,150,file_in)) )
    {
        strcpy(message[i],buffer);
        i++;
    } // end while

    for (i = 1; i < 3; i++)
    {
        for (j = 1; j < 3; j++)
        {
            if (strcmp(message[j - 1], message[j]) > 0)
            {
                strcpy(t, message[j - 1]);
                strcpy(message[j - 1], message[j]);
                strcpy(message[j], t);
            } // end if
        } // end for
    } // end for

    printf("\nStrings in order are : ");

    for (i = 0; i < 3; i++)
    {
        printf("message: %d: %s\n", i+1, message[j]);
    } // end for

    getchar();
    return 0;
} // end function: main
The following code:
-- compiles cleanly
-- contains all the changes needed to the OPs posted code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define MAX_MESSAGES (10)
#define MAX_MESSAGE_LEN (150)

static char message[MAX_MESSAGES][MAX_MESSAGE_LEN] = {{'[=10=]'}};
static char buffer[MAX_MESSAGE_LEN] = {'[=10=]'};

int main()
{
    /*declare and initialise variable*/
    int i=0;
    int j;

    FILE *file_in;
    if( NULL == (file_in=fopen("test.txt", "r") ) )
    { // then, fopen failed
        perror( "fopen failed for test.txt" );
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    srand(time(NULL));

    /*stores and prints the data from the string*/
    while( (i<MAX_MESSAGES) && fgets(buffer,150,file_in) )
    {
        strcpy(message[i],buffer);
        i++;
    } // end while

    printf("\ndisplay %d messages in random order\n", MAX_MESSAGES);
    printf("with possible repeated messages and skipped messages\n");
    for( i=0; i < MAX_MESSAGES; i++)
    {
        j = rand() % MAX_MESSAGES;
        printf("message: %d: %s\n",j, message[j]);
    } // end for

    return 0;
} // end function: main