似乎无法让我的While语句工作

时间:2016-03-31 15:02:11

标签: c arrays while-loop

所以我正在尝试编写一个程序,要求用户输入单词或短语,然后给出单词的拼字游戏值。我遇到的问题是,当用户只输入字母" q"时,程序的while循环需要关闭。或" Q"作为单词/短语。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include<conio.h>

这是决定字母值

的函数
int scrabbleValue(char* word)
{

    int value = 0;
    int scrabbleTot = 0;
    int index = 0;

    while (*(word + index) != '\0')
    {
        switch (toupper(*(word + index)))
        {
        case 'A':
        case 'E':
        case 'I':
        case 'L':
        case 'N':
        case 'O':
        case 'R':
        case 'S':
        case 'T':
        case 'U':
            value = 1;
            break;
        case 'D':
        case 'G':
            value = 2;
            break;
        case 'B':
        case 'C':
        case 'M':
        case 'P':
            value = 3;
            break;
        case 'F':
        case 'H':
        case 'V':
        case 'W':
        case 'Y':
            value = 4;
            break;
        case 'K':
            value = 5;
            break;
        case 'J':
        case 'X':
            value = 8;
            break;
        case 'Q':
        case 'Z':
            value = 10;
            break;
        }
        scrabbleTot += value;
        *word++;
    }
    return scrabbleTot;

}

好的主要陈述

int main()
{
    char *ptr;
    char check;
    int wordvalue;

    char name[100];

    printf("\nEnter a word :");

    scanf("%s", name);

    ptr = name;
    check = name[0];
    wordvalue = scrabbleValue(ptr);
    printf("Your word value is: %d\n", wordvalue);

这是我遇到麻烦的地方。我似乎无法得到这个循环工作正常。我尝试了字符串比较名称[0]和&#34; q&#34;但它不会编译。

    while (!strcmp() || !strcmp(name, "Q"))
    {
        printf("\nEnter a word :");
        scanf("%s", name);
        ptr = name;

        wordvalue = scrabbleValue(ptr);
        printf("Your word value is: %d\n", wordvalue);
    }
    return 0;

}

3 个答案:

答案 0 :(得分:1)

你可能想要这个主要功能。没有无用的变量且没有重复的代码,它就会简单得多。

int main()
{
    int wordvalue;
    char name[100];

    while (1)
    {
        printf("\nEnter a word :");
        scanf("%s", name);

        if (strcmp(name, "Q") == 0)
          break;

        wordvalue = scrabbleValue(name);
        printf("Your word value is: %d\n", wordvalue);
    }

    return 0;
}

这是未经测试的代码,可能无法编译,可能存在拼写错误。

答案 1 :(得分:0)

而不是while (!strcmp() || !strcmp(name, "Q")) {,这似乎是错误的,您可以使用以下更简单的代码:

while (!(tolower(name[0]) == 'q' && name[1] == '\0')) {

答案 2 :(得分:0)

你几乎拥有它。 while应该是:

while (strcmp(name,"q") && strcmp(name,"Q")) {

当值相等时,从strcmp得到0(隐式转换为false)。你希望价值既不是&#34; q&#34;也不是&#34; Q&#34;循环继续(两者都必须返回非零或真),因此只有while (true && true)将继续。

如此完整main将是:

int main()
{
    char *ptr;
    char check;
    int wordvalue;

    char name[100];

    printf("\nEnter a word :");

    scanf("%s",name);

    ptr = name;
    check = name[0];
    wordvalue = scrabbleValue(ptr);
    printf("Your word value is: %d\n",wordvalue);
    while (strcmp(name,"q") && strcmp(name,"Q")) {
        printf("\nEnter a word :");
        scanf("%s",name);
        ptr = name;

        wordvalue = scrabbleValue(ptr);
        printf("Your word value is: %d\n",wordvalue);
    }
    return 0;
}