Программа для печати некоторых строк в случайном порядке - PullRequest
0 голосов
/ 22 октября 2019

это мой код;Вы можете увидеть ошибки в нижней части. Я знаю, что массивы в C выглядят как указатели, но я почти уверен, что объявления верны (char str). Я не знаю, почему ничего не печатается

#include <stdio.h>
#include <stdlib.h>
#define N 3     
#define M 10

/* run this program using the console pauser or add your own getchsystem("pause") or input loop */


int main(int argc, char *argv[]) {

    srand(time());      //to generate each run different numbers
    char str [N][M];
    int i,j;
    i=0;

    str [0][0]="good";
    str[1][M]="morning";
    str[2][M]="world";

    for (j=0;j<N; j++) {
        i=rand()%(N-0+1)+1;     //formula to generate randoms numbers
        printf("%s",str[i]);    
    }

    return 0;
}

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Сначала включите предупреждения компиляции. Вы должны получать предупреждения, потому что ваш код недействителен. Например, с помощью gcc я получаю:

randstr.c: In function ?main?:
randstr.c:16:15: warning: assignment makes integer from pointer without a cast [enabled by default]
     str [0][0]="good";
               ^
randstr.c:17:14: warning: assignment makes integer from pointer without a cast [enabled by default]
     str[1][M]="morning";
              ^
randstr.c:18:14: warning: assignment makes integer from pointer without a cast [enabled by default]
     str[2][M]="world";

Это потому, что вы присваиваете символьные строковые указатели char элементам в массиве, и каждый элемент char содержит один символ (обычно, 8 битов.)

Более простой способ кодирования этого кода - использовать char *str[N] вместо char str[N][M].

Но причина, по которой ваша программа падает с ошибкой сегментации, заключается в том, что time()принимает аргумент, а вы его не проходитеПопробуйте time(NULL).

Вот как это будет закодировано с использованием char *str[N]:

#include <stdio.h>
#include <stdlib.h>
#define N 3

int main(int argc, char *argv[]) {

    srand(time(NULL));      //to generate each run different numbers

    char *str[N];
    int i,j;

    str[0] = "good";
    str[1] = "morning";
    str[2] = "world";

    for (j=0; j<N; j++) {
        i = rand() % N;     //formula to generate randoms numbers
        printf("%s\n",str[i]);
    }

    return 0;
}
0 голосов
/ 22 октября 2019

Здесь с вашим кодом есть несколько ошибок:

В C вы не можете назначать строки с помощью оператора присваивания, если это не указатель строки или вы не инициализируете. См. здесь для справочной страницы по strcpy.

Используя вышеописанный метод, вы можете определить ваши строки следующим образом:

    strcpy(str[0], "good");
    strcpy(str[1], "morning");
    strcpy(str[2], "world");

Ваш вызов функции rand также должен простоbe i = rand() % N;

Когда вы вызывали str [N] [M], вы фактически обращались к одному символу строки, а не ко всему этому. напр.

str[0][0] = 'g'
str[0][1] = 'o'
str[1][0] = 'm'
str[1][1] = 'o'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...