#c
#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;
}
Когда я запускаю программу, она выводит «Значение Scrabble: 0». Похоже, что программа полностью пропускает цикл while, возможно, я неправильно использую getchar, но я не могу понять, что не так.
Комментарии:
1. Очки — это те же очки, что и для каждой буквы в игре scrabble. Так ли это, что вы создаете какую-то программу в связи со scrabble?
2. Да, я читаю книгу, и создание этой программы было упражнением.
3. Спасибо, ребята! Я не ожидал ответов так быстро.
4. Затем отметьте ответ как принятый, нажав зеленую галочку рядом с ответом
5. Обратите внимание, что
getchar()
возвращаетint
и может возвращатьEOF
, а не фактический символ. Ввод-вывод — сложная задача.
Ответ №1:
Это должно быть ch = toupper(ch);
toupper
не изменяет свой аргумент.
И, хотя это никоим образом не связано с проблемой, я бы рекомендовал использовать switch
для такого кода.
Ответ №2:
Ваша проблема в 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;
}
Ответ №3:
toupper(ch);
вычисляет верхний регистр ch, но ничего с ним не делает. Ваш код отлично работает с вводом в верхнем РЕГИСТРЕ. При вводе в нижнем регистре вам просто нужно изменить
toupper(ch);
Для
ch = toupper(ch);
Ответ №4:
Если вы не сохраните преобразованный символ в переменную, он останется в том случае, в котором он был введен. ‘toupper’ — это функция, и для повторного использования возвращаемого ею значения необходимо сохранить копию.
Ответ №5:
Предложения не могут быть «свободными» в программе, должны быть связаны с другими, как правило, со знаком присваивания (=). Изменить ch = toupper(ch)
на ch = toupper(ch)