1

我正在开发一个生成 7 个字母的拼字游戏程序,然后允许用户输入单词并查看它们是否有效以及点值是多少。一旦我开始做这些价值观,我就开始遇到问题。

我正在像这样调用函数 wordvalue,并希望将结果存储到 value 中。用户词存储在用户词[8]中。

int value = wordvalue(userword[8]);

这是我的代码,用于找出数组单元格中的字母,然后添加。我不确定它有什么问题,但在这一步每次都会崩溃。

int wordvalue (char userword[8]){

    int m;
    int currentvalue = 0;

    for (m=0; m < 8; m++){

        switch (userword[m]){

        case 'A':
        case 'E':
        case 'I':
        case 'L':
        case 'N':
        case 'O':
        case 'R':
        case 'S':
        case 'T':
        case 'U':
            currentvalue = currentvalue + 1;
            break;
        case 'D':
        case 'G':
            currentvalue = currentvalue + 2;
            break;
        case 'B':
        case 'C':
        case 'M':
        case 'P':
            currentvalue = currentvalue + 3;
            break;
        case 'F':
        case 'H':
        case 'V':
        case 'W':
        case 'Y':
            currentvalue = currentvalue + 4;
            break;
        case 'K':
            currentvalue = currentvalue + 5;
            break;
        case 'J':
        case 'X':
            currentvalue = currentvalue + 8;
            break;
        case 'Q':
        case 'Z':
            currentvalue = currentvalue + 10;
            break;

        }


    }

    //printf("%d", currentvalue);
    return currentvalue;
}
4

3 回答 3

2
int value = wordvalue(userword[8]);

这个调用看起来不对。

假设userword是一个数组,char您正在传递一个预期char指向的指针。char

你可能想做:

int value = wordvalue(userword);
于 2012-09-14T16:59:55.570 回答
2

我知道您已经接受了答案,但我想向您展示一种避免写冗长switch陈述的方法。

values[]数组包含字母表中每个字母的拼字游戏值。然后该letterValue()函数使用字母的 ASCII 值 - 'A' 对values[]数组进行索引以获取字母值。values[0] is for 'A'values[25] is for 'Z'

#include <stdio.h>
#include <string.h>
#include <ctype.h>

/* prototypes */
int wordvalue (char *userword);
int letterValue( char letter );

int values[] = { 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 letterValue( char letter )
{
    return( values[toupper((int)letter) - 'A'] );  
} 

int wordvalue(char *userword)
{
    int m;
    int currentvalue = 0;

    for (m=0; m < strlen(userword); m++)
    {
        currentvalue += letterValue( userword[m]);
    }
    return currentvalue;
}

int main()
{
    char word[] = "Progress";

    printf("Value of %s is %d\n", word, wordvalue(word));
    return( 0 );
}
于 2012-09-14T17:49:09.163 回答
1

如果userword是一个已经初始化的字符串,你必须像这样将它传递给你的函数wordvalue(userword)

你所拥有的是int value = wordvalue(char userword[8]).

我看到的一个问题是您userword在函数参数中声明这是一个由 8 个字符组成的数组。

通过这样做,您实际上是在传递userwordto的第 8 个元素wordvalue。由于您刚刚初始化了这个数组,所以 的值userword[8]是未知的,并且您的程序将表现出未定义的行为。

你需要初始化你的数组,并给它赋值:

int wordvalue(char *userword);         //function declaration

int main(void)
{
    char userword[8] = "foobarrr";         //declare 8 char array holding an 8 character string
    int value = wordvalue(userword);       //call the function
    printf("%d", value);                   //print function output
    return 0;
}

/*function prototype here*/
于 2012-09-14T17:17:53.683 回答