Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219

Пример из книги Джесс Либерти не работает(указатели)

30.09.2015, 04:56. Показов 1143. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Занимаюсь С++ по книге Джесс Либерти "Освой самостоятельно С++ за 21 день" В С++ новичок. На 8-ом дне, а вернее на 8-ой теме "указатели" меня стопорнул нижеприведенный код. В нем новые элементы, которые раньше не использовались, да и код сам не компилируется и выдает кучу ошибок(несколько раз сравнивал код с листингом 1 в 1). Разница с кодом в книге в том, что я дописываю using namespace std; и в заголовках библиотек не пишу .h. Пишу в консоли Lunux. В примере листинга код должен работать следующим образом:

Enter a string: How it works
Got this word: How
Got this word: it
Got this word: works

т.е. раскладывает введенный текст на строки.
Кроме вопроса, почему код не компилируется вопрос: Что значит амперсанд после типа int в аргументах функции GetWord(), почему не объявлена функция getline(), что это за способ записи cin.getline(buffer,bufferSize);(речь идет о точке между оператором cin и названием функции.

После компиляции выдается следующее:
→ g++ -o pointers pointers.cpp
pointers.cpp:2:16: fatal error: ctype: Nie ma takiego pliku ani katalogu
#include<ctype>
^
compilation terminated.

закоментировал 2-ую строку(#include<ctype>), т.к. при неподключенной библиотеке чаще всего программа работает и просто выдается варнинг. Скомпилировал. Вот результат:
novik@sigma:~/języki_programowania/c++
→ g++ -o pointers pointers.cpp
pointers.cpp: In function ‘int main()’:
pointers.cpp:16:39: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’
while(GetWord(buffer, word, bufferSize)){
^
pointers.cpp:6:6: error: in passing argument 3 of ‘bool GetWord(char*, char*, int&)’
bool GetWord(char* string, char* word, int& wordOffset);
^
pointers.cpp: In function ‘bool GetWord(char*, char*, int&)’:
pointers.cpp:29:29: error: ‘strlen’ was not declared in this scope
for(i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
^
pointers.cpp:40:20: error: ‘strcpy’ was not declared in this scope
strcpy(word,p1,len);
^
pointers.cpp:43:46: error: ‘strlen’ was not declared in this scope
for(i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]);i++)
^
anovik@sigma:~/języki_programowania/c++

От куда черти пляшут, вообще не пойму. Либо я на полной затупе, либо может быть какие-либо описки в книге.
Вот сам код:
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
#include<iostream>
#include<ctype>
#include<string>
using namespace std;
 
bool GetWord(char* string, char* word, int& wordOffset);
 
int main(){
        const int bufferSize = 255;
        char buffer[bufferSize+1];
        char word[bufferSize+1];
        int wordOffset = 0;
cout<<"Enter a strih: ";
cin.getline(buffer,bufferSize);
 
while(GetWord(buffer, word, bufferSize)){
        cout<<"Got this word: "<<word<<endl;
}
return 0;
}
bool GetWord(char* string, char* word, int& wordOffset){
        if(!string[wordOffset])
        return false;
 
        char *p1, *p2;
        p1 = p2 = string+wordOffset;
 
        int i;
        for(i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
                p1++;
 
        if(!isalnum(p1[0]))
        return false;
 
        p2 = p1;
        while(isalnum(p2[0]))
        p2++;
 
        int len = int(p2 - p1);
        strcpy(word,p1,len);
        word[len] = '\0';
 
        for(i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]);i++)
                p2++;
 
        wordOffset = int(p2-string);
 
        return true;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2015, 04:56
Ответы с готовыми решениями:

Код, приведеном в книге "С++ за 21 дней. Либерти Джесс" не работает
Здравствуйте. Я новичок в деле программировании, так что, пожалуйста, относитесь ко мне к пониманию. Купил книгу &quot;С++ Освой...

Джесс Либерти. Можно изучать?
Решил попробовать начать изучать С++. Нашел старенькую книгу Джесса Либерти &quot;С++ за 21 день.Третье издание&quot; ,многие мне советовали...

Указатели, не работает пример из книги
Программа пишет является ли слово палидромом. ошибка: cannot convert 'char*' to 'const char**' for argument '1' to 'bool...

3
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
30.09.2015, 05:42
C++
1
2
for(i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
    p1++;
Если в учебнике так и было, можете смело использовать его в качестве туалетной бумаги. Эта дичь - не описки в книге, а творчество студента начавшего осваивать C++ 21 день тому назад.
PS:
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
#include<iostream>
using namespace std;
bool GetWord(char*&src, char* word)
{
    while(*src&&!isalnum(*src))
        ++src;
    if(*src)
    {
        while(*src&&isalnum(*src))
            *word++=*src++;
        *word=0;
        return true;
    }else
        return false;
}
int main()
{
    char str[256];
    char*pos=str;
    char word[256];
    cin.getline(str,255);
    while(GetWord(pos,word))
        cout<<word<<endl;
    return 0;
}
2
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
30.09.2015, 18:46  [ТС]
Renji, что такое isalnum?я так понимаю стандартная какая-нить функция из библиотеки, но что она делает?

Добавлено через 17 минут
Renji, может посоветуешь тогда книгу для начинающих изучать С++, в которой можно быть уверенным. Об этой книге читал отзывы, вроде все хвалили, но как видишь, тоже не без багов.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
30.09.2015, 19:32
isalnum проверяет что символ является буквой или цифрой. Поиск по www.cplusplus.com легко снимает подобные вопросы. Хотя, там нужно хотя-бы минимальное знание английского. Но оно в любом случае нужно, так как на русский переведена далеко не вся необходимая в жизни документация.

Из литературы посоветую раздел форума Литература C++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2015, 19:32
Помогаю со студенческими работами здесь

Указатели на структуры. Программа-пример из книги Шилдта
Здравствуйте. Прошу проверить, правильно ли я поняла значение каждой строчки, т.к. в книге построчного объяснения не дается. Еще хотелось...

Пример с книги не работает
первый же пример с книги по вебгл не работает &lt;!DOCTYPE html&gt; &lt;html lang=“en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot; /&gt; ...

Не работает пример из книги
Я писал код из книжки и ничего не работает. #include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; int main(){ ...

Не работает пример из книги
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using...

Не работает пример из книги
Всем привет помогите что здесь может быть не правильно ? это из книги изучаем программирование на Си , может там в стандарты не такие...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru