2016-03-31 5 views
-2

になるように見えないので、ユーザーに単語やフレーズを尋ねて、その単語のスクラブル値を与えるプログラムを作成しようとしています。私が取り組んでいる問題は、ユーザーが単語/フレーズとして文字 "q"または "Q"だけを入力すると、プログラムのwhileループが閉じる必要があることです。私のWhileステートメントは

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

これは私が問題を抱えていますのはここ

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); 

がある古き良きメイン文の手紙の価値

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; 

} 

を決定する関数です。私はループが正しく動作するようになっている間にこれを得ることはできません。私は名前[0]と "q"の文字列比較を試みましたが、コンパイルされません。間違っているようだ

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; 

} 
+0

あなたは 'のstrcmp()'をどうしようとしている何!の?また、C++を使用している場合は、文字列を扱う際に['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)を使うべきです。 – NathanOliver

+3

'!strcmp()'とは何ですか? –

+2

'!strcmp()'はコンパイルされますか?それはしないでください。 –

答えて

0

代わりのwhile (!strcmp() || !strcmp(name, "Q")) {、あなたは、次のコード簡素枚使用することができます:あなたは、おそらくこの主な機能をしたい

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

それは完璧だったよ、 –

+0

@RichAngal喜んで助けることができた。問題が解決した場合は、回答を受け入れることを検討してください。 – blazs

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; 
} 

これはテストされていないコードであり、コンパイルされず、誤植がある可能性があります。

0

あなたはほとんどそれを持っていました。 whileがされている必要があります。値が等しいときstrcmpから

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

あなたは(暗黙的にfalseに変換)0を取得します。値が "q"でなく、 "Q"でループを続行する(両方ともゼロ以外の値、つまりtrueを返さなければなりません)ので、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; 
} 
関連する問題