查找拼字游戏单词的点

时间:2017-06-21 11:45:39

标签: c

所以我最近开始学习c语言,没有编码或计算机科学的先验知识。写下这段代码,使用拼字游戏点找到一个单词的值,如下所示: 1:AEILNORSTU 2:DG 3:BCMP 4:FHVWY 5:K 8:JX 10:QZ。

# include <stdio.h>
# include <ctype.h>
# include <conio.h>
int main (void)
{
  int n=0;
  char ch;
  clrscr();
  printf("Enter the SCRABBLE word\n");
  ch = getchar();
  while(ch!='\n')
  {
    toupper(ch);
    if(ch =='A'||'E'||'I'||'L'||'N'||'O'||'R'||'S'||'T'||'U')
      n=n+1;
    else if (ch =='D'||'G')
      n=n+2;
    else if (ch =='B'||'C'||'M'||'P')
      n=n+3;
    else if (ch =='F'||'H'||'V'||'W'||'Y')
      n=n+4;
    else if (ch =='K')
      n=n+5;
    else if (ch =='J'||'X')
      n=n+8;
    else if (ch =='Q'||'Z')
      n=n+10;

    ch = getchar();
  }
  printf("The value is %d",n);
  return 0;
}

那么当我运行这段代码时会发生什么:     输入SCRABBLE字   例如:障碍     值为7 虽然它应该是9,因为b带有3个点,如上面的代码所示,a携带1,r个载波1,再次r 1个点,i携带1个点,最后两个字母表各自为1个点,因此3 + 1 + 1 + 1 + 1 + 1 + 1 = 9

2 个答案:

答案 0 :(得分:1)

ch =='D'||'G'之类的表达式等于(ch == 'D')||'G'

换句话说,您首先执行子表达式ch == 'D'。然后你做一个逻辑或使用'G'。结果将始终为真,因为'G'非零,并且C中的所有非零都为真。

您需要ch == 'D' || ch == 'G'来检查ch是否等于'D'ch是否等于'G'

这是非常基本的,每个good beginners book都会告诉你。

在您显示的代码的特定情况下,第一次检查始终是真的,因此,您不会检查任何其他情况。

答案 1 :(得分:-1)

您忘记获得toupper的返回值。你也不检查它 (根据man 3 toupper,函数将在失败时返回相同的char)

然后你的条件不好: if (ch == 'Q' || 'Z')if (ch == 'Q' || ch == 'Z')不同 如果右侧或左侧条件为真,则||表示 ,而在第一种情况下,(ch == 'Q')并非总是如此,但'Z'始终为真。

这意味着你的第一个条件:

if(ch =='A'||'E'||'I'||'L'||'N'||'O'||'R'||'S'||'T'||'U')

始终为真

以下是您可以应用的小修正案,这可能有效

    char         tmp;
    ch = getchar();
    while(ch!='\n')
    {
        //Stocking in a tmp char to check return value
        tmp = ch;

        //Here
        ch = toupper(ch);
        if (ch == tmp)
        {
          //Error
          break;
        }
        {...}
        else if (ch =='Q'|| ch =='Z')
          n += 10;
        ch = getchar();
    }

编辑:更正toupper()的返回值;