2015-12-01 8 views
0
#include <stdio.h> 
#include <time.h> 
#include <string.h> 

char *matrix[10][10]; 
int main(void) { 
    int i; 
    char *list[4]; 
    char *words[20] = { 
     " c a t ", " c a r ", " b e a r ", " s h i p ", 
     " m o u s e ", " b e a t l e ", " c o a t ", " n e s t ", 
     " i c e ", " s u g a r ", " b a c o n ", " f r o w n ", 
     " s m i l e ", " d e a d ", " f e a t h e r ", " g o a t ", 
     " h e n "," j e l l y "," k o a l a "," l i p s " 
    }; 

    int length; 
    int num; 
    int k; 
    int m; 
    char otherString=0; 
    char *c; 
    int j; 
    int s; 
    int r; 
    char test[10]; 
    char *token; 
    const char *search = " "; 
    char *empty = ""; 
    int size; 
    int ans; 
    int x; 
    int y; 
    int pos; 
    int pos2; 
    int randRow; 
    int randColumn; 
    int chosen[10]; 
    int random; 
    int d; 
    int ROWS = 10;  // number of rows 
    int COLUMNS = 10;  // number of columns 

    printf("\tA\tB\tC\tD\tE\tF\tG\tH\tI\tJ\n"); 
    srand(time(NULL)); 

    for (i = 0; i < 4; i++) { 
     printf("\n"); 
     d = 0; 
     do { 
      random = (rand() % 20); 
      list[i] = words[random]; 
      d = 0; 
      for (j = 0; j < i; j++) { 
       if (strcmp(words[random], list[j]) == 0) 
        d = 1; 
      } 
     } while (d); 
    } 

    token = strtok((words[random]), search); 

    while (token != NULL) { 
     length = strlen(words[random]); 
     for (k = 0; k < length; k++) { 
      matrix[i][k] = token; 
      token = strtok(NULL, search); 
      matrix [i][k] = token; 
     } 
    } 
    for (r = 0; r < 10; r++) { 
     printf("\n"); 
     for (s = 0; s < 10; s++) { 
      //ans = strlen(matrix[r][s]); 
      /* if (ans == 0) { 
       c = 'A' + (rand() % 26); 
       matrix[r][s] = c; 
      }*/ 
      printf("\t%s", matrix[r][s]); 
     } 
    } 
    getchar(); 
    return 0; 
} 

В основном эта программа генерирует 4 случайные слова, которые не могут быть дублируют strtok используется для скольжения слова так, чтобы они могут быть введены полукокса путем полукокса в матрицу. наконец, любые нулевые символы в матрице будут заменены на случайные символов. однако strtok генерирует ошибку времени выполнения, и я не уверен, как проверить нулевой элемент?strtok необработанное исключение; Доступ нарушение письма расположение

+1

'strtok' изменить строку, но вы не можете изменить строковые литералы. – BLUEPIXY

+0

, так как я могу исправить ошибку? – chris

+0

как насчет проверки нулевого элемента? – chris

ответ

1

В этом заявлении

token = strtok((words[random]),search); 

функция strtok пытается изменить строковый литерал имени элемента массива words[random].

Строковые литералы неизменяемы в C. Любая попытка изменить строковый литерал приводит к неопределенному поведению.

Вместо массива указателей на строковых литералов

char *words[20]={" c a t "," c a r "," b e a r "," s h i p "," m o u s e "," b e a t l e "," c o a t "," n e s t "," i c e "," s u g a r "," b a c o n "," f r o w n "," s m i l e "," d e a d "," f e a t h e r "," g o a t "," h e n "," j e l l y "," k o a l a "," l i p s "}; 

вы должны определить двумерный массив символов инициализируется строковых литералов. Например

char words[20][20]={" c a t "," c a r "," b e a r "," s h i p "," m o u s e "," b e a t l e "," c o a t "," n e s t "," i c e "," s u g a r "," b a c o n "," f r o w n "," s m i l e "," d e a d "," f e a t h e r "," g o a t "," h e n "," j e l l y "," k o a l a "," l i p s "}; 
+1

это не производит ошибок, но все же не правильный результат? – chris

+0

@chris Вы можете разместить свой код при просмотре кода. –

+0

Это новый код :) – chris

0
token = strtok((words[random]),search); 

    while(token!=NULL) 
    { 
    length=strlen(words[random]); 

    for(k=0;k<length;k++){ 

     matrix [i][k]=token; 

     token = strtok(NULL, search); 


      matrix [i][k]=token; 

    } 
    } 

Это перепутались и не то, что вы собираетесь. Измените его на что-то прямое, e. g .:

for (k = 0, c = words[random]; token = strtok(c, search); c = NULL, ++k) 
     matrix[i][k] = token; 

 Смежные вопросы

  • Нет связанных вопросов^_^