2014-06-23 179 views
2

我想創建一個程序,通過求和它的字母值來計算一個單詞的值。C程序 - 混淆輸出

這些是字母和它們的相應的值:

  • 1點:A,E,I,L,N,O,R,S,T,U
  • 2分:d,G
  • 3點:B,C,M,P
  • 4分:F,H,V,W,Y
  • 5分:K
  • 8分:J-,X
  • 10分:Q,Z

這裏的程序:

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

int main(void) 
{ 
    char ch; int sum=0; 

    printf("Enter a word: "); 

    while ((ch=getchar())!='\n') { 
     toupper(ch); 
     if (ch== 'A' || ch== 'E' || ch== 'I' || ch== 'L' || ch== 'N' || ch== 'O' || ch== 'R' || ch== 'S' || ch== 'T' || ch== 'U') 
      sum+=1; 

     else if (ch== 'D' || ch== 'G') 
      sum+=2; 

     else if (ch=='B' || ch== 'C' || ch== 'M' || ch== 'P') 
      sum+=3; 

     else if (ch=='F' || ch== 'H' || ch== 'V' || ch== 'W' || ch== 'Y') 
      sum+=4; 

     else if (ch=='K') 
      sum+=5; 

     else if (ch=='J' || ch== 'X') 
      sum+=8; 

     else if (ch=='Q' || ch== 'Z') 
      sum+=10; 
    } 
    printf("\nScrabble value: %d",sum); 

    return 0; 
} 

當我運行它打印 「拼字值:0」 的方案。似乎程序完全跳過while循環,也許我沒有正確使用getchar,但我無法弄清楚什麼是錯的。

+0

對於拼字遊戲中的每個字母,點數都是相同的點數。是這樣,您是在創建一些與拼字遊戲相關的程序嗎? –

+0

是的,我正在讀一本書,創建這個程序是一個練習。 –

+0

謝謝你們!我並不期待如此快速的答案。 –

回答

7

應該ch = toupper(ch);

toupper不會修改它的參數。

而且,雖然與這個問題沒有任何關係,但我會建議使用switch這樣的代碼。

0

toupper(ch);計算ch的大寫但不做任何事情。你的代碼可以正常使用大寫輸入。以小寫輸入你只需要改變

toupper(ch); 

ch = toupper(ch); 
1

你的問題是toupper()。該函數不會直接改變你的字符,它會返回改變後的字符。

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

int main(void) 
{ 
    char ch; int sum = 0; 

    printf("Enter a word: "); 

    while ((ch = getchar()) != '\n') { 
     ch = toupper(ch); 
     if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'L' || ch == 'N' || ch == 'O' || ch == 'R' || ch == 'S' || ch == 'T' || ch == 'U') 
      sum += 1; 
     else if (ch == 'D' || ch == 'G') 
      sum += 2; 
     else if (ch == 'B' || ch == 'C' || ch == 'M' || ch == 'P') 
      sum += 3; 
     else if (ch == 'F' || ch == 'H' || ch == 'V' || ch == 'W' || ch == 'Y') 
      sum += 4; 
     else if (ch == 'K') 
      sum += 5; 
     else if (ch == 'J' || ch == 'X') 
      sum += 8; 
     else if (ch == 'Q' || ch == 'Z') 
      sum += 10; 
    } 
    printf("\nScrabble value: %d", sum); 
    return 0; 
} 
0

除非你轉換後的文字存儲到一個變量它仍然是在它已經進入的情況。 'toupper'是一個函數,爲了重用它返回的值,你必須存儲一個副本。

0

句子在一個程序中可能不是「鬆散的」,必須與他人關聯,通常與賦值符號(=)相關聯。 更改ch = toupper(ch)作者:ch = toupper(ch)