2017-10-24 4 views
-1

사용자는 해독 할 여러 문자를 묻는 메시지가 표시되고 해당 단어의 점수를 반환합니다.Ccrabble C 프로그램은 컴파일하지만 사용자가 파일을 실행할 수 없도록합니다.

프로그램을 컴파일 할 수는 있지만 프로그램이 실제로 실행되지 않습니다. 그래서 나는 문제가 내 코드 내에 어디에 있는지 확신 할 수 없다. 나는 이것에 상대적으로 새로운 것이다.

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 
#include <math.h> 

#define num_letters_input 7 

int main() 
{ 
    const int alphabet_count[26] = {8, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1}; 
    const int alphabet_value[26] = {1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10}; 
    int letter_set[26]; 
    int size_letter_set = 26; 

    void generate_letter_set(int letter_set[], int size_letter_set, int num_letters) { 

     int random_a = rand() % 26; 
     int random_b = rand() % (alphabet_count[random_a]); 
     letter_set[random_a] = random_b; 
     printf("Your letters are: "); 
     for(int i=0; i < size_letter_set; i++) { 
      if(letter_set[i]) 
      { 
       int num = letter_set[i]; 
       while(num--) 
        printf("%c ", i+97); 
      } 
     } 

     printf("\n"); 
    } 

    int read_word(char word[], int max_size_word) { 

     printf("Enter your word: "); 
     scanf("%s", word); 
     printf("%s \n", word); 
     int size_word = strlen(word); 
     if(size_word > max_size_word) 
      read_word(word, max_size_word); 
     return size_word; 
    } 

    bool check_word(char word[], int size_word, int letter_set[], int size_letter_set) { 

     int count_array[26]; 
     for(int i=0; i<size_word; i++) { 
      count_array[word[i]-97]++; 
     } 
     for(int i=0; i<size_letter_set; i++) { 
      if(count_array[i] <= letter_set[i]) 
       continue; 
      else { 
       return false; 
      } 
      return true; 
     } 

     int compute_word_value(char word[], int size_word) { 

      int word_value = 0; 
      for(int i=0; i<size_word; i++) { 
       word_value = word_value + alphabet_value[word[i]-97]; 
      } 
      return word_value; 
     } 

     int main(void) { 

      int max_size_word = 7; 
      int size_word, word_value; 
      bool validity = false; 
      char word[95]; 
      printf("This program plays the game of scrabble.\n"); 
      for(int i=0; i < size_letter_set; i++) { 
       letter_set[i] = 0; 
      } 
      generate_letter_set(letter_set, size_letter_set, num_letters_input); 
      while(!validity) { 
       size_word = read_word(word, max_size_word); 
       validity = check_word(word, size_word, letter_set, size_letter_set); 
       if(!validity) 
       { 
        printf("The word is not valid. Use your letters: "); 
        for(int i=0; i < size_letter_set; i++) { 
         if(letter_set[i]) 
         { 
          int num = letter_set[i]; 
          while(num--) { 
           printf("%c ", i+97); 
          } 
         } 
        printf("\n"); 
        } 
       } 
       printf("The value of your word is: "); 
       word_value = compute_word_value(word, size_word); 
       printf("%d", word_value); 
       printf("Thank you for playing."); 
      } 
     } 
    } 
    return 0; 
} 
+0

시도하면 어떻게됩니까? 서식과 들여 쓰기가 고정되도록 몇 분 정도주지. – Steve

+1

왜 프로그램의 각 줄 사이에 빈 줄이 있습니까? (아니, 더 이상 그런 식으로 읽을 수 없습니다). –

+0

프로그램을 실행하기 위해 어떤 acttion __exactly__을 (를) 수행합니까? 오류 메시지가 표시됩니까? 그렇다면 어떤 오류 메시지가 표시됩니까? 질문을 편집하고 그 내용을 명확히하십시오. –

답변

1

그것은 당신이하려는 것과 다소 다를 수 있습니다,
는 나는 다음과 같은 수정으로 시작하는 것이 유용 할 것이라 생각합니다.

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

#define num_letters_input 7 

const int alphabet_count[26] = {8,2,2,4,12,2,3,2,9,1,1,4,2,6,8,2, 1,6,4,6,4,2,2,1,2, 1}; 
const int alphabet_value[26] = {1,3,3,2, 1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10}; 


void generate_letter_set(int letter_set[], int size_letter_set, int num_letters) { 
    printf("Your letters are: "); 

    for(int i = 0; i < num_letters; i++){ 
     int random_a = rand() % 26; 
     int random_b = rand() % alphabet_count[random_a]; 
     letter_set[random_a] = random_b; 
    } 
    for(int i = 0; i < size_letter_set; ++i){ 
     if(letter_set[i]){ 
      int num = letter_set[i]; 

      while(num--) 
       printf("%c ", 'a' + i); 
     } 
    } 
    printf("\n"); 
} 

int read_word(char word[], int max_size_word) { 
    int size_word = 0; 
    do { 
     printf("Enter your word: "); 
     scanf("%s", word); 
     size_word = strlen(word); 
    } while(size_word > max_size_word); 

    return size_word; 
} 

bool check_word(char word[], int size_word, int letter_set[], int size_letter_set) { 
    int count_array[26] = {0}; 

    for(int i = 0; i < size_word; i++) { 
     count_array[word[i]-'a']++; 
    } 

    for(int i=0; i < size_letter_set; i++) { 
     if(count_array[i] <= letter_set[i]) 
      continue; 
     else 
      return false; 
    } 
    return true; 
} 

int compute_word_value(char word[], int size_word) { 
    int word_value = 0; 

    for(int i=0; i<size_word; i++) { 
     word_value += alphabet_value[word[i]-97]; 
    } 

    return word_value; 
} 

int main(void){ 
    int letter_set[26] = {0}; 
    int size_letter_set = 26; 
    int max_size_word = num_letters_input; 
    int size_word, word_value; 
    bool validity = false; 
    char word[96]; 
    srand(time(NULL)); 

    printf("This program plays the game of scrabble.\n"); 
    generate_letter_set(letter_set, size_letter_set, num_letters_input); 

    while(!validity) { 
     size_word = read_word(word, max_size_word); 
     validity = check_word(word, size_word, letter_set, size_letter_set); 

     if(!validity){ 
      printf("The word is not valid.\nUse your letters: "); 
     } 
    } 

    printf("The value of your word is: "); 
    word_value = compute_word_value(word, size_word); 
    printf("%d\n", word_value); 
    printf("Thank you for playing.\n"); 
    return 0; 
}