Форум программистов, компьютерный форум CyberForum.ru

Функция isspace - C++

Восстановить пароль Регистрация
 
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
13.03.2013, 20:59     Функция isspace #1
Это код из книги Шилда:
C
1
2
3
4
5
6
7
8
int main(void)
{
    char ch = getchar();
    if(isdigit(ch)) printf("%c является цифрой\n", ch);
  }
 
  return 0;
}
Если введенное значение цифра, isdigit возвратит ненулевое значение, соответственно произойдет вывод сообщения. Но если - не цифра, вместо завершения работы функции, вылетит окно с ошибкой. В чем может быть проблема? Может есть альтернатива?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 20:59     Функция isspace
Посмотрите здесь:

C++ Функция y=f(x)
C++ функция
функция C++
C++ Функция
C++ Функция what()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:01     Функция isspace #2
А оно вообще скомпилируется?
У вас где-то фигурная скобка пропущена.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.03.2013, 21:01     Функция isspace #3
Как этот код компилируется? Две закрывающие скобки, одна открывающая.
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
13.03.2013, 21:09  [ТС]     Функция isspace #4
Просто обрезал неаккуратно, вот полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <ctype.h>
#include <stdio.h>
 
int main(void)
{
  char ch;
 
  for(;;) {
    ch = getchar();
    if(ch == '.') break;
    if(isdigit(ch)) printf("%c является цифрой\n", ch);
  }
 
  return 0;
}
среда: visual studio 2012

Добавлено через 6 минут
Кстати, заметил, что ошибка вылезает, если вводим русскую букву
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:19     Функция isspace #5
Цитата Сообщение от jon_illien Посмотреть сообщение
Кстати, заметил, что ошибка вылезает, если вводим русскую букву
Ну так не нужно использовать функции из <cctype> для не-ascii'шных символов.
Я сам сегодня на эти грабли наступил, когда токенайзер для плюсов писал - isalpha и isspace на некоторых юникодных символах приводили к сегфолту.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2013, 22:27     Функция isspace #6
Вот так и для русских будет работать:
C++
1
if(isdigit((unsigned char)ch)) printf("%c является цифрой\n", ch);
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
13.03.2013, 22:35  [ТС]     Функция isspace #7
Да, работает!) А, в чем секрет?) Что дает это приведение?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 22:50     Функция isspace
Еще ссылки по теме:

Функция C=(x^a + y^(TM))/((x+y)^a) C++
Функция C++
Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2013, 22:50     Функция isspace #8
Боюсь неправильно сказать, уже забыл эту тему. Знаковый и беззнаковый char. Если русские буквы, и если char знаковый, то код - отрицательное число. Отсюда ошибка. Приведение убирает знак числа.

Добавлено через 3 минуты
Кажется, зависит от компилятора. Кто лучше знает, пусть поправит.
Yandex
Объявления
13.03.2013, 22:50     Функция isspace
Ответ Создать тему
Опции темы

Текущее время: 21:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru