我正在尝试使用 C 程序查找单词的拼字游戏值
I am trying to find the scrabble value of a word using C program
我总是将输入的每个字母的值设为 1,而我应该按照代码中的描述获取值。请帮助找出我的代码中的错误。
#include <stdio.h>
#include <ctype.h>
char c;
char num (char c);
int main () {
int sum;
printf("Enter a word:");
c=0;
while (c=getchar() != '\n') {
c=toupper(c);
sum+=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);
}
为了清理干净,初始化总和:
int sum = 0;
您的函数确定值的逻辑看起来不错(可能与 return 值不同),
但是你不断地改变参数c
。这实际上并没有破坏任何东西,但看起来有些混乱。我建议将所有 c= something
更改为 return something;
。
要使用默认处理,请将 return(c);
更改为 return 0;
。
而且你从不调用你的函数。
改变
sum+=c;
至
sum+=num(c);
从一些程序员(学分)的(绝对必要的)评论中挑选,
由于运算符优先级,表达式 c=getchar() != '\n'
等于 c=(getchar() != '\n')
。这意味着 c
的值将是 0
或 1
,除此之外别无其他。另请注意 getchar
return 是一个整数,这对于检查 EOF
很重要。最后,您需要检查 EOF
或一般错误。
简而言之,这对你有用(调用 num;修复了 while 中的 getchar 调用;将总和初始化为 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);
}
其他人已经回答了这个问题,但仅供参考,这是您编写更好的查找功能的方式:
int get_val (char c)
{
const int VALUES ['Z' - 'A' + 1] =
{
['A' - 'A'] = 1,
['B' - 'A'] = 3,
['C' - 'A'] = 3,
...
};
return VALUES[c - 'A'];
}
我总是将输入的每个字母的值设为 1,而我应该按照代码中的描述获取值。请帮助找出我的代码中的错误。
#include <stdio.h>
#include <ctype.h>
char c;
char num (char c);
int main () {
int sum;
printf("Enter a word:");
c=0;
while (c=getchar() != '\n') {
c=toupper(c);
sum+=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);
}
为了清理干净,初始化总和:
int sum = 0;
您的函数确定值的逻辑看起来不错(可能与 return 值不同),
但是你不断地改变参数c
。这实际上并没有破坏任何东西,但看起来有些混乱。我建议将所有 c= something
更改为 return something;
。
要使用默认处理,请将 return(c);
更改为 return 0;
。
而且你从不调用你的函数。
改变
sum+=c;
至
sum+=num(c);
从一些程序员(学分)的(绝对必要的)评论中挑选,
由于运算符优先级,表达式 c=getchar() != '\n'
等于 c=(getchar() != '\n')
。这意味着 c
的值将是 0
或 1
,除此之外别无其他。另请注意 getchar
return 是一个整数,这对于检查 EOF
很重要。最后,您需要检查 EOF
或一般错误。
简而言之,这对你有用(调用 num;修复了 while 中的 getchar 调用;将总和初始化为 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);
}
其他人已经回答了这个问题,但仅供参考,这是您编写更好的查找功能的方式:
int get_val (char c)
{
const int VALUES ['Z' - 'A' + 1] =
{
['A' - 'A'] = 1,
['B' - 'A'] = 3,
['C' - 'A'] = 3,
...
};
return VALUES[c - 'A'];
}