使用数组在C中创建switch语句?

我正在尝试创建一个switch语句,它将一个单词输入一个数组,然后通过switch语句抛出每个字母,并根据它所在的字母为每个字母分配一个点,并给出该单词的最终点值,然后我似乎无法使arrays部分正确。 任何帮助,将不胜感激!

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; } 

试试这个

  switch(word[i]){ 

在switch语句中。 就目前而言,即使您在数组的范围内进行迭代,也不会测试数组中的每个元素。 话虽如此,我会在另一个答案中采用Kerrek SB建议的方法。 这更整洁,更紧凑。

拥有查找数组可能会更快:

 int const letter_score[26] = { 1, 2, 1, 3, ..., 10 }; /* key: ABCDZ */ score += letter_score[c - 'A']; // or "toupper(word[i]) - 'A'" 

警告:这需要一种编码,其中大写字母是连续排列的,例如Unicode或ASCII。

变量word是一个数组,但您想要switch每个字符。 因此,您需要:

 switch(word[i]) 

在C中,您不能在switch使用数组(以及case表达式)。 此外,传递给switch()类型和每种case指定的类型必须匹配。 所以你能做的最多就是打开一个角色。 你几乎把它弄好了,除了你把整个arrays都传递给了开关。 使用index来引用字符。 例如:

 switch (word[i]) { ... } 

你有word作为size7的数组,你不能打开数组,你必须在数组的每个字符上swicth所以使用:switch(word [i])