我试图使用C程序找到单词的拼字游戏值

时间:2018-06-19 06:22:03

标签: c char parentheses operator-precedence getchar

我总是得到我输入的每个字母的值为1,而我应该得到代码中描述的值。请帮助我在代码中找到错误。

JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
JwtSecurityToken tokenS = handler.ReadToken(token) as JwtSecurityToken;
string profile = tokenS.Claims.First(claim => claim.Type == "profile").Value;
JObject o = JObject.Parse(profile);
string cardType = o.SelectToken("$.roles." + "Rolename" + ".Type").ToString();

3 个答案:

答案 0 :(得分:1)

为了保持清洁,初始总和:

int sum = 0;

用于确定值的函数逻辑看起来正常(可能与返回值不同),
但是你经常更改参数c。这实际上并没有破坏任何东西,但看起来有些令人困惑。我建议将所有c= something更改为return something;

要进行默认处理,请将return(c);更改为return 0;

此外,你永远不会打电话给你的功能。

更改

sum+=c;

sum+=num(c);    

从某些程序员家伙(学分)中获取(绝对必要的)评论,
由于运算符优先级,表达式c=getchar() != '\n'等于c=(getchar() != '\n')。这意味着c的值将为01,而不是其他任何内容。另请注意,getchar返回一个int,这对于检查EOF很重要。最后,您需要检查EOF或一般错误。

答案 1 :(得分:1)

简而言之,这对你有用(调用num;固定getchar调用while;初始化sum为0;无错误处理):

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

char c;

char num (char c);

int main () {
    int sum = 0;

    printf("Enter a word:");

    c=0;

        while ((c=getchar()) != '\n') {
            c=toupper(c);
            sum+=num(c);
        }

    printf("Scrabble value : %d",sum);

    return(0);
}

char num (char c) {

    if (c=='A'||c=='E'||c=='I'||c=='L'||c=='N'||c=='O'||c=='R'||c=='S'||c=='T'||c=='U') c=1;
    if (c=='D'||c=='G') c=2;
    if (c=='B'||c=='C'||c=='M'||c=='P') c=3;
    if (c=='F'||c=='H'||c=='V'||c=='W'||c=='Y') c=4;
    if (c=='K') c=5;
    if (c=='J'||c=='X') c=8;
    if (c=='Q'||c=='Z') c=10;

    return(c);
}

答案 2 :(得分:0)

其他人已经回答了这个问题,但是仅供参考,这是您编写更好的查找功能的方式:

int get_val (char c)
{
  const int VALUES ['Z' - 'A' + 1] =
  {
    ['A' - 'A'] = 1,
    ['B' - 'A'] = 3,
    ['C' - 'A'] = 3,
    ...
  };

  return VALUES[c - 'A'];
}