2017-10-24 7 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; 
} 
関連する問題