Задать вопрос
@TonyMaster
WEB developer

Почему всегда срабатывает else?

#include <stdio.h>
#include <ctype.h>
int alph(int ch);
int main(void) {
    int ch;
    
    while ((ch = getchar()) != EOF) {
        if (isalpha(ch)) {
            putchar('"');
            putchar(ch);
            putchar('"');
            printf(" является буквой!\n"
                   "Ее номер: %d\n", alph(ch));
        }
        else {
            //printf("%d", alph(ch));
            printf("2\n");
        }
    }
    return 0;
}
int alph(int ch) {
    if (!isalpha(ch))
        ch = 'a';
    return ch - 96;
}

Программа, которая запрашивает ввод и проверяет является ли буквой, если да, то выводит номер этой буквы, если нет, то должна выводить 2, но выводит почему то двойку два раза вподряд, также если является буквой, все равно срабатывает оператор else, что приводит к появлению лишней двойки. Программа простенькая, а вот в чем проблема никак не пойму, уверен, что все предельно просто...
  • Вопрос задан
  • 275 просмотров
Подписаться 1 Оценить 4 комментария
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Все корректно работает. Просто после ввода буквы у вас еще первод строки захватывает

C:\MinGW\bin>test.exe
a
"a" является буквой!
Ее номер: 1
[10]
1
[49]
[10]
3
[51]
[10]
a
"a" является буквой!
Ее номер: 1
[10]
b
"b" является буквой!
Ее номер: 2
[10]

#include <stdio.h>
#include <ctype.h>
int main(void) {
    int ch;
    
    while ((ch = getchar()) != EOF) {
	if (ch=='\n' || ch=='\r') continue;
        if (isalpha(ch)) {
            printf("[%c] является буквой, ее номер: %d\n", ch, ch-96);
        }
        else {
            printf("[%d] это не буква\n", ch);
        }
    }
    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы