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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
jon_illien
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
#1

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

13.03.2013, 20:59. Просмотров 1144. Ответов 7
Метки нет (Все метки)

Это код из книги Шилда:
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 возвратит ненулевое значение, соответственно произойдет вывод сообщения. Но если - не цифра, вместо завершения работы функции, вылетит окно с ошибкой. В чем может быть проблема? Может есть альтернатива?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 20:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция isspace (C++):

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" - C++
Добрый день! Я только начинаю изучать язык c++ по книге "Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)". ...

Заменить функцию isspace на другую - C++
Ребята, нужна срочно ваша помощь. Как можно заменить функцию isspace? #include <stdio.h> #include <stdlib.h> #include <ctype.h> ...

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include <iostream> #include <math.h> #include <iomanip> using namespace std; int main(){ float s, p; int c, a; s=0; ...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений - C++
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

7
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:01 #2
А оно вообще скомпилируется?
У вас где-то фигурная скобка пропущена.
1
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.03.2013, 21:01 #3
Как этот код компилируется? Две закрывающие скобки, одна открывающая.
0
jon_illien
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
13.03.2013, 21:09  [ТС] #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 минут
Кстати, заметил, что ошибка вылезает, если вводим русскую букву
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:19 #5
Цитата Сообщение от jon_illien Посмотреть сообщение
Кстати, заметил, что ошибка вылезает, если вводим русскую букву
Ну так не нужно использовать функции из <cctype> для не-ascii'шных символов.
Я сам сегодня на эти грабли наступил, когда токенайзер для плюсов писал - isalpha и isspace на некоторых юникодных символах приводили к сегфолту.
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2013, 22:27 #6
Вот так и для русских будет работать:
C++
1
if(isdigit((unsigned char)ch)) printf("%c является цифрой\n", ch);
1
jon_illien
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
13.03.2013, 22:35  [ТС] #7
Да, работает!) А, в чем секрет?) Что дает это приведение?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2013, 22:50 #8
Боюсь неправильно сказать, уже забыл эту тему. Знаковый и беззнаковый char. Если русские буквы, и если char знаковый, то код - отрицательное число. Отсюда ошибка. Приведение убирает знак числа.

Добавлено через 3 минуты
Кажется, зависит от компилятора. Кто лучше знает, пусть поправит.
2
13.03.2013, 22:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 22:50
Привет! Вот еще темы с ответами:

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f; cout&lt;&lt;Rus(&quot;введите выходной...

Чистая виртуальная функция функция не имеет оператора переопределения - C++
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page. Page.h #pragma once ...

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов - C++
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована...

Функция заполняющая массив и функция вывода массива - C++
Напишите две функции. Первая функция заполняет массив, вторая функция выводит массив на экран


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru