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

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

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

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

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

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

Чем заменить функцию isspace? - C (СИ)
Как можно заменить isspace в функции? Просто не до конца её понимаю, да и хотелось бы узнать, какие альтернативные варианты есть. ...

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

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

Перегрузка операций: 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; ...

Выясните, сохраняет ли булева функция 0, 1, является ли функция линейной, монотонной, само двойственной? - Дискретная математика
Помогите пожалуйста!!! Булева функция задана вектором значений F(x)=(1001) Выясните, сохраняет ли эта функция 0, 1, является ли эта...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:01     Функция isspace #2
А оно вообще скомпилируется?
У вас где-то фигурная скобка пропущена.
Vourhey
Почетный модератор
6477 / 2252 / 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
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.03.2013, 21:19     Функция isspace #5
Цитата Сообщение от jon_illien Посмотреть сообщение
Кстати, заметил, что ошибка вылезает, если вводим русскую букву
Ну так не нужно использовать функции из <cctype> для не-ascii'шных символов.
Я сам сегодня на эти грабли наступил, когда токенайзер для плюсов писал - isalpha и isspace на некоторых юникодных символах приводили к сегфолту.
alsav22
5416 / 4812 / 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
Еще ссылки по теме:

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

Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная функция C - strstr) - C (СИ)
Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная функция C - strstr).Помогите плииз

Функция DisplayTranslucentSprite функция стала игнорировать параметр прозрачности - Pure Basic
Здравствуйте. Что-то изменил в коде так, что функция стала игнорировать параметр прозрачности, т.е. при любом значении спрайт отображается...

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

Функция нахождения максимума в строке матрицы и функция вычисления ||D|| - Pascal
Помогите написать программу. Заранее спасибо. Даны вещественные матрицы A, B, C размером 5x6. Вычислить величину ...


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

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

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

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