Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 寻找拼字的要点_C - Fatal编程技术网

C 寻找拼字的要点

C 寻找拼字的要点,c,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 S

所以我最近开始学习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;
}
因此,当我运行此代码时会发生以下情况: 输入拼字 障碍物 值为7 虽然它应该是9,因为b携带3个点,如上面代码所述,a携带1,r携带1,同样是R1点,i携带1个点,最后两个字母表各一个点,所以这是3+1+1+1+1+1+1=9

像ch='D'| |'G'这样的表达式等于ch='D'| |'G'

换句话说,首先执行子表达式ch=='D'。然后使用“G”进行逻辑or运算。结果总是正确的,因为‘G’是非零的,所有非零的东西在C中都是正确的

您希望ch='D'| ch='G'来检查ch是否等于'D'或者ch是否等于'G'

这是非常基本的,每个人都会这样告诉你


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

您忘记了获取toupper的返回值。你也没有检查它 根据man 3 toupper的说法,如果出现故障,函数将返回相同的字符

那么你的情况就不好了: 如果ch='Q'| |'Z'与如果ch='Q'| | ch='Z'不同 | |表示如果右或左条件为真,并且在第一种情况下,ch==‘Q’并不总是真的,但‘Z’总是真的

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

ifch='A'| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

这永远是真的

这里有一些你可以申请的修正,这可能有用

    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的返回值

什么是拼字??你说的是拼字,但你输入的是一个字符。。请澄清,请了解缩进。还可以考虑使用空行将代码划分为块。它将使代码更易于阅读、理解和维护。此外,返回一个int。当您检查错误或getchar返回EOF时文件结束时,这一点很重要。一些你确实应该检查的东西。我没有得到正确的答案是没有帮助的。你在输入什么?你到底想干什么?预期产量是多少?这个案子应该是敏感的吗?这只允许使用大写字母谢谢这似乎解决了我的问题。除了另一个。如果我输入小写字母,它总是显示0。如果我使用大写锁定输入,答案是正确的。猜猜我的“图珀”有什么问题吗?谢谢again@NayanT函数返回新字符。它无法在适当的位置修改。啊,再次感谢。我也一定会在我的压痕上练习;谢谢。是的,我的头巾有点问题。你能解释一下包含break的if块吗?它是在检查错误吗?怎么做?再次谢谢。你好,谢谢。是的,我的头巾有点问题。你能解释一下包含break的if块吗?它是在检查错误吗?怎么做?再次感谢。正如Drumz所说,如果失败,toupper将返回“c”。因此,您必须检查ch是否等于“c”,以查看是否有错误。@Drumz您误读了。toupper不返回“c”。未进行任何转换时,它将返回输入字符。@斯塔克:好的,谢谢,我的错