我正在制作一个生成7个字母的拼字游戏程序,然后允许用户输入单词并查看它们是否有效以及点值是什么。一旦我开始做这些值,就是我开始遇到问题的时候。
我正在调用像这样的函数wordvalue,并希望将结果存储到值中。 用户词存储在用户词[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;
}
答案 0 :(得分:2)
int value = wordvalue(userword[8]);
此调用看起来不对。
假设userword
是char
的数组,您传递char
,其中指向char
的指针。
您可能想要这样做:
int value = wordvalue(userword);
答案 1 :(得分:2)
我知道你已经接受了答案,但我想告诉你一种避免写那篇冗长的switch
陈述的方法。
values[]
数组包含字母表中每个字母的Scrabble值。然后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 );
}
答案 2 :(得分:1)
如果userword
是已初始化的字符串,则必须将其传递给您的函数:wordvalue(userword)
。
你拥有的是int value = wordvalue(char userword[8])
。
我看到的一个问题是你声明userword
这是函数参数中包含8个字符的数组。
通过这样做,您实际上将userword
的第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*/
答案 3 :(得分:0)
您应该对int wordvalue(char *)
函数进行编程,以接受任意长度的字符串作为参数。只要没有看到NULL字符(\0
),您的代码就必须计算点数。在你的游戏逻辑中,你必须检查输入的单词是否太长,或者是否没有使用过两次。
您的代码如下所示:
int wordvalue(char * word)
{
int m;
int currentvalue = 0;
for (m = 0; word[m] != NULL; m++)
{
switch (word[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;
}
}
return currentvalue;
}