Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/64: Рейтинг темы: голосов - 64, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
1

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

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

Author24 — интернет-сервис помощи студентам
Извиняюсь заранее, если было уже где-то - я не нашел(
Штудирую Прату 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 вылетает следующая ошибка - во вложении, помогите пожалуйста, а то ничего не пойму(
Миниатюры
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 19:33
Ответы с готовыми решениями:

где скачать книгу "Язык программирования C. Лекции и упражнения Стивен Прата"
Подскажите у кого есть в електронном формате эта книга ? вот ссылка...

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

Нуждаюсь в электронной версии на русском Стивен Прата, «Язык программирования Си. Лекции и упражнения»(Именно Си, не ++!)
Можно где-либо достать, на русском Стивен Прата, «Язык программирования Си. Лекции и упражнения»?...

Нужны готовые упражнения по учебнику: Стивен Прата
Нужны готовые упражнения по учебнику: Стивен Прата (СИ)

19
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,716
16.05.2014, 19:51 2
У меня в VS 2008 ошибка не вылетает.
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 19:57  [ТС] 3
Тогда вообще мистика( У меня на двух компах (один Win7 - на работе, второй Win 8.1 - дом), на всех MS VS 2013, и одна фиговина - вылетает ошибка(
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 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;
}
Миниатюры
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука  
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 20:13  [ТС] 5
а что значит "полность пересобрать"? вроде и так пересобирается....
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
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
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 23:11  [ТС] 7
Диагностировать удалось только то, что ошибка вылетает при вводе русских символов(( Английские проходят нормально... Посоветует кто нибудь что нибудь такое, чтобы исправить подобную проблему?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:17 8
Лучший ответ Сообщение было отмечено CPPNoob как решение

Решение

Цитата Сообщение от CPPNoob Посмотреть сообщение
ошибка вылетает при вводе русских символов
Цитата Сообщение от CPPNoob Посмотреть сообщение
Посоветует кто нибудь что нибудь такое, чтобы исправить подобную проблему?
Там, где используются функции cctype, например:
C++
1
if (isalpha((unsigned char)ch))
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
16.05.2014, 23:25  [ТС] 9
Так точно! Спасибо ОГРОМНОЕ! С применением unsigned char - всё заработало! А можете объяснить из-за чего такое происходит? Чтобы тоже в теме быть...
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
16.05.2014, 23:28 10
Цитата Сообщение от CPPNoob Посмотреть сообщение
Так точно! Спасибо ОГРОМНОЕ! С применением unsigned char - всё заработало! А можете объяснить из-за чего такое происходит? Чтобы тоже в теме быть...
Можно ещё локаль передать в isalpha
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:32 11
Лучший ответ Сообщение было отмечено CPPNoob как решение

Решение

Цитата Сообщение от CPPNoob Посмотреть сообщение
А можете объяснить из-за чего такое происходит?
Знаковый и беззнаковый char. В разных реализациях по-разному бывает, поэтому у кого-то ошибки будут, у кого-то нет.
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
16.05.2014, 23:36 12
Лучший ответ Сообщение было отмечено CPPNoob как решение

Решение

Цитата Сообщение от CPPNoob Посмотреть сообщение
С применением unsigned char - всё заработало!
потому что например русская "я" 0xFF
в signed -1
unsigned 255
о чем тебя и предупреждали в окошке когда вывалилась программа
у студии в настройка проекта есть пункт, кем считать char по умолчанию unsigned или signed
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 23:45 13
Цитата Сообщение от ValeryS Посмотреть сообщение
у студии в настройка проекта есть пункт, кем считать char по умолчанию unsigned или signed
Это где такое?
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
16.05.2014, 23:52 14
Цитата Сообщение от alsav22 Посмотреть сообщение
Это где такое?
пишу по русски у меня русская 2008
проект
свойства
С/С++
язык
"По умолчанию char unsigned Да/нет
ключ /J

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

Не по теме:

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

0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.05.2014, 00:01 15
Цитата Сообщение от ValeryS Посмотреть сообщение
alsav22,мы же вроде где то обсуждали это
Не помню... Спросил потому, что в 10-й не нашёл.
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
17.05.2014, 00:15  [ТС] 16
2013 - нету..:
Миниатюры
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.05.2014, 00:18 17
Цитата Сообщение от CPPNoob Посмотреть сообщение
2013 - нету..:
В 8-й есть, потом, наверное, убрали.
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
17.05.2014, 00:32 18
а если вручную ключ вбить?
/J вкладка "командная строка"
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.05.2014, 00:41 19
Цитата Сообщение от ValeryS Посмотреть сообщение
а если вручную ключ вбить?
/J вкладка "командная строка"
Так работает.
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 7
17.05.2014, 01:23  [ТС] 20
угу, в 2013 тоже работает.
В общем разобрались - всем ОГРОМНОЕ СПАСИБО!
0
17.05.2014, 01:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2014, 01:23
Помогаю со студенческими работами здесь

Ищу книгу "Язык программирования C. Лекции и упражнения."
Здравствуйте. Ищу книгу Стивена Прата &quot;Язык программирования C. Лекции и упражнения.&quot; издательства...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru