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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.68
CPPNoob
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
#1

Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука - C++

16.05.2014, 19:33. Просмотров 8389. Ответов 19
Метки нет (Все метки)

Извиняюсь заранее, если было уже где-то - я не нашел(
Штудирую Прату 6-е издание.

Полностью перекопировал Листинг 6.8.:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cctype>
 
int main()
{
    using namespace std;
    setlocale(LC_ALL, "Russian");
    
    cout << "Введите произвольный текст для анализа, в конце введите символ \"@\"\n";
 
    char ch;
    int whitespace = 0;
    int digits = 0;
    int chars = 0;
    int punct = 0;
    int others = 0;
 
    cin.get(ch);
    while (ch != '@')
    {
        if (isalpha(ch))
            chars++;
        else if (isspace(ch))
            whitespace++;
        else if (isdigit(ch))
            digits++;
        else if (ispunct(ch))
            punct++;
        else
            others++;
        cin.get(ch);
    }
 
    cout << chars << " символов, "
        << whitespace << " пробелов, "
        << digits << " чисел, "
        << punct << " знаков препинания, "
        << others << " остального говна.\n";
    system("PAUSE");
    return 0;
}

И при сборке\выполнении в MS VS 2013 вылетает следующая ошибка - во вложении, помогите пожалуйста, а то ничего не пойму(
0
Миниатюры
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 19:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука (C++):

где скачать книгу "Язык программирования C. Лекции и упражнения Стивен Прата" - C++
Подскажите у кого есть в електронном формате эта книга ? вот ссылка http://www.yakaboo.ua/ru/catalog/all/c-primer-plus-89173

С. Прата. Язык программирования C++. Лекции и упражнения - C++
Заранее прошу прощения если мой топик здесь не к месту. Но все же, дело в том, что я окончил 1 курс Компьютерных наук и хочу летом подучить...

задание из книги стивен прата 6 издание глючит. в чем может быть ошибка - C++
собрал задачу, ставлю текстовый файл внутри программы, с цифровыми данными, а он не работает. файл сам рабочий, так как другая программа...

книга стивен прата как справиться с задачей стр 342 листинг 7.12 - C++
стивен прата 6 издание. стр 343 листинг 7.12 strctfun переписал код, код полностью работает и проблем в этом нет, но при вводе данных по...

стивен прата стр 433 листинг 9.1 а также 9.2 и 9.3 ошибка при компоновке файлов - C++
компилятор visual studio 2013 в книге написано что не надо включать #include. я так и не понял почему не надо, если здесь он защищен. ...

Ищу третье издание Язык программирования С++ в отличном от DJVU формате - C++
Даже стыдно как-то создавать тему... НО... . Ищу третье издание Язык программирования С++ в отличном от DJVU формате. Нужно, дабы...

19
zss
Модератор
Эксперт С++
6883 / 6445 / 2155
Регистрация: 18.12.2011
Сообщений: 16,938
Завершенные тесты: 1
16.05.2014, 19:51 #2
У меня в VS 2008 ошибка не вылетает.
0
CPPNoob
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 19:57  [ТС] #3
Тогда вообще мистика( У меня на двух компах (один Win7 - на работе, второй Win 8.1 - дом), на всех MS VS 2013, и одна фиговина - вылетает ошибка(
0
gazlan
3135 / 1911 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
16.05.2014, 19:58 #4
Не вижу причин. У меня все работает. Попробуйте полностью пересобрать проект.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <cctype>
 
using namespace std;
 
int main(int argc,char** argv)
{  
   setlocale(LC_ALL,"Russian");
   
   int   whitespace = 0;
   int   digits     = 0;
   int   chars      = 0;
   int   punct      = 0;
   int   others     = 0;
 
   cout << "Введите произвольный текст для анализа, в конце введите символ \"@\"\n";
 
   char  ch;
 
   cin.get(ch);
 
   while (ch != '@')
   {     
      if (isalpha(ch))
      {
         chars++;
      }
      else if (isspace(ch))
      {
         whitespace++;
      }
      else if (isdigit(ch))
      {
         digits++;
      }
      else if (ispunct(ch))
      {
         punct++;
      }
      else
      {
         others++;
      }
 
      cin.get(ch);
   }
 
   cout << chars      << " символов, "
        << whitespace << " пробелов, "
        << digits     << " чисел, "
        << punct      << " знаков препинания, "
        << others     << " остального говна.\n";
   
   return 0;
}
0
Миниатюры
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука  
CPPNoob
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 20:13  [ТС] #5
а что значит "полность пересобрать"? вроде и так пересобирается....
0
EVP
488 / 256 / 43
Регистрация: 14.12.2010
Сообщений: 514
16.05.2014, 23:04 #6
Цитата Сообщение от CPPNoob Посмотреть сообщение
И при сборке\выполнении в MS VS 2013 вылетает следующая ошибка - во вложении, помогите пожалуйста, а то ничего не пойму(
Ты чего-то жмёшь, когда вводишь данные (например, ctrl-Z), и у тебя накрывается входной поток.

Автор книжки забил в этом примере на обработку ошибок, т.к. эту тему объясняет в других темах.
И не инициировал переменную ch по умолчанию...

Попробуй изменить немного пример так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <cctype>
 
#define NAFIK '@'
 
void get(char& ch)
{
    using namespace std;
    cin.get(ch);
    if (std::cin.fail())
        ch = NAFIK;
}
 
int main()
{
    using namespace std;
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите произвольный текст для анализа, в конце введите символ \"@\"\n";
 
    char ch = ' ';
    int whitespace = 0;
    int digits = 0;
    int chars = 0;
    int punct = 0;
    int others = 0;
 
    get(ch);
    while (ch != NAFIK)
    {
        if (isalpha(ch))
            chars++;
        else if (isspace(ch))
            whitespace++;
        else if (isdigit(ch))
            digits++;
        else if (ispunct(ch))
            punct++;
        else
            others++;
        get(ch);
    }
 
    cout << chars << " символов, "
        << whitespace << " пробелов, "
        << digits << " чисел, "
        << punct << " знаков препинания, "
        << others << " остального говна.\n";
    system("PAUSE");
    return 0;
}
0
CPPNoob
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 23:11  [ТС] #7
Диагностировать удалось только то, что ошибка вылетает при вводе русских символов(( Английские проходят нормально... Посоветует кто нибудь что нибудь такое, чтобы исправить подобную проблему?
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:17 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CPPNoob Посмотреть сообщение
ошибка вылетает при вводе русских символов
Цитата Сообщение от CPPNoob Посмотреть сообщение
Посоветует кто нибудь что нибудь такое, чтобы исправить подобную проблему?
Там, где используются функции cctype, например:
C++
1
if (isalpha((unsigned char)ch))
0
CPPNoob
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 23:25  [ТС] #9
Так точно! Спасибо ОГРОМНОЕ! С применением unsigned char - всё заработало! А можете объяснить из-за чего такое происходит? Чтобы тоже в теме быть...
0
EVP
488 / 256 / 43
Регистрация: 14.12.2010
Сообщений: 514
16.05.2014, 23:28 #10
Цитата Сообщение от CPPNoob Посмотреть сообщение
Так точно! Спасибо ОГРОМНОЕ! С применением unsigned char - всё заработало! А можете объяснить из-за чего такое происходит? Чтобы тоже в теме быть...
Можно ещё локаль передать в isalpha
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:32 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CPPNoob Посмотреть сообщение
А можете объяснить из-за чего такое происходит?
Знаковый и беззнаковый char. В разных реализациях по-разному бывает, поэтому у кого-то ошибки будут, у кого-то нет.
0
ValeryS
Модератор
6967 / 5304 / 522
Регистрация: 14.02.2011
Сообщений: 17,885
16.05.2014, 23:36 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CPPNoob Посмотреть сообщение
С применением unsigned char - всё заработало!
потому что например русская "я" 0xFF
в signed -1
unsigned 255
о чем тебя и предупреждали в окошке когда вывалилась программа
у студии в настройка проекта есть пункт, кем считать char по умолчанию unsigned или signed
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:45 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
у студии в настройка проекта есть пункт, кем считать char по умолчанию unsigned или signed
Это где такое?
0
ValeryS
Модератор
6967 / 5304 / 522
Регистрация: 14.02.2011
Сообщений: 17,885
16.05.2014, 23:52 #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Это где такое?
пишу по русски у меня русская 2008
проект
свойства
С/С++
язык
"По умолчанию char unsigned Да/нет
ключ /J

Добавлено через 1 минуту

Не по теме:

alsav22,мы же вроде где то обсуждали это

0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.05.2014, 00:01 #15
Цитата Сообщение от ValeryS Посмотреть сообщение
alsav22,мы же вроде где то обсуждали это
Не помню... Спросил потому, что в 10-й не нашёл.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 00:01
Привет! Вот еще темы с ответами:

Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос - C++
Условие: &quot;Нарисуйте граф целых и фундаментальных типов,где от одного типа идёт стрелка к другому,если все значения первого типа могут быть...

Стивен Прата (гл. 6, упр. 6) - массив структур - C++
Что-то упускаю, не могу понять, что именно. Не выводит список имён. Кто подскажет, почему? // sp_Ch6_Pg301_Ex06 /// Занятия по...

Стивен Прата - про decltype (гл. 8, стр. 422) - C++
Прочитал раз десять. Сверился с оригиналом: Я что-то упустил или тип функции long? Соответственно, и m должна быть long? С какого...

Шилдт или Стивен Прата: что выбрать? - C++
Недавно закончил вводный курс от Яндекс по C++. Хотел бы дальше продолжить изучать язык. В интернете нарыл, что хвалят учебник Шилда...


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

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

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