我正在尝试创建一个switch语句,它将一个单词输入一个数组,然后通过switch语句抛出每个字母,并根据它所在的字母为每个字母分配一个点,并给出该单词的最终点值,我似乎无法使阵列部分正确。任何帮助将不胜感激!
int main(){
int letter_points = 0;
char word[7];
int word_length = 7;
int i;
printf("Enter a Word\n");
scanf("%s", word);
for(i = 0; i < word_length; i++){
switch(word){
//1 point
case 'A':
case 'E':
case 'I':
case 'L':
case 'N':
case 'O':
case 'R':
case 'S':
case 'T':
case 'U':
letter_points++;
break;
//2 points
case 'D':
case 'G':
letter_points += 2;
break;
//3 points
case 'B':
case 'C':
case 'M':
case 'P':
letter_points += 3;
break;
//4 points
case 'F':
case 'H':
case 'V':
case 'W':
case 'Y':
letter_points += 4;
break;
//5 points
case 'K':
letter_points += 5;
break;
//8 points
case 'J':
case 'X':
letter_points += 8;
break;
//10 points
case 'Q':
case 'Z':
letter_points += 10;
break;
}
}
printf("%d\n", letter_points);
return;
}
答案 0 :(得分:6)
拥有查找数组可能会更快:
int const letter_score[26] = { 1, 2, 1, 3, ..., 10 };
/* key: A B C D Z */
score += letter_score[c - 'A']; // or "toupper(word[i]) - 'A'"
警告:这需要一种编码,其中大写字母是连续排列的,例如Unicode或ASCII。
答案 1 :(得分:3)
尝试使用此
switch(word[i]){
在switch语句中。就目前而言,即使您在数组的范围内进行迭代,也不会测试数组中的每个元素。话虽如此,我会在另一个答案中采用Kerrek SB建议的方法。这更整洁,更紧凑。
答案 2 :(得分:3)
变量word
是一个数组,但您想在每个字符上switch
。因此,您需要:
switch(word[i])
答案 3 :(得分:0)
在C中,您不能在switch
中使用数组(以及case
的表达式)。此外,传递给switch()
的类型和每个case
中指定的类型必须匹配。所以你能做的最多就是打开一个角色。你几乎把它弄好了,除了你将整个阵列传递给开关。使用index来引用字符。例如:
switch (word[i]) {
...
}
答案 4 :(得分:0)
你有word作为size7的数组,你不能打开数组,你必须在数组的每个字符上swicth所以使用: 开关(字[I])