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

Разъясните пожалуйста пару строк кода

20.05.2016, 17:33. Показов 1557. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа 1:
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
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
 
int main()
{
char str[80];
char token[80];
char *p , *q;
 
cout << "Введите предложение: ";
fgets (str , 80 , stdin);
size_t nl_pos=strlen(str);
if(nl_pos)
str[nl_pos - 1] = '\0';
 
p = str;
 
while (*p) 
        {
        q = token;
        while(*p != ' ' && *p)
                {
                *q = *p;
                q++,p++;
                }
        if (*p) p++;
        *q= '\0';
        cout << token << '\n';
        }
return 0;
}

В программе 1 есть несколько строк которые мне не понятны:
while(*p != ' ' && *p) вот что она делает и как правильно читать и понимать ее ?
Пока значение расположенное по адресу в указателе p не равно пробелу и не равно значению расположенному по адресу в указателе p ???? или как это понять && *p?

Что происходит тут:
q++;
p++;
Имеется ввиду прирост значения указателя ?

А тут:
if (*p) p++
*q='\0';

Что означает каждая строка ?
если значение расположенное по адресу указанному в указателе p, то увеличить значение записанное в сам указатель да ?
И строка *q='\0' говорит следующее ?
присвоить значение "нулевой символ" в значение переменной расположенную по адресу в указателе q ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2016, 17:33
Ответы с готовыми решениями:

Поясните пожалуйста пару строк кода
Доброго времени суток. Помогите пожалуйста &quot;по научному&quot; объяснить пару строчек кода, препода мое объяснение не устраивает(( ...

Объяснить пару строк кода
Доброго времени суток. Есть код #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; //образец стека template...

пару строк кода с Delphi на C++
Здравствуйте! Есть код на Delphi, его нужно переписать на C++ Вот этот цикл: while length(c)&gt;1 do begin for i:=1 to length(c)...

5
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
20.05.2016, 17:43
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
while(*p != ' ' && *p)
пока по адресу p находится значение не равное пробелу и не равное нулю.
p+=,q++ переход к следующему элементу массива.
if(*p)p++; - переходить к следующему элементу массива до тех пор, пока не найдем нуль.

*q=0; - записать нуль по указанному адресу.
2
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
20.05.2016, 18:00  [ТС]
zss, не равное пробелу понятно, но не понятное откуда условие не равное нулю ?
или знак && означает ноль ?

p++,q++ переход к следующему элементу массива. Это понял, спасибо вам)

if(*p)p++; - переходить к следующему элементу массива до тех пор, пока не найдем нуль.
а где тут сказано про ноль ? это подразумевается самой функцией if ?

*q=0; - записать нуль по указанному адресу (зачем это нужно делать ? )
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.05.2016, 18:08
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
но не понятное откуда условие не равное нулю ?
это основы языка 0 ЛОЖЬ все остальное ИСТИНА
if работает со значениями ИСТИНА и ЛОЖЬ
теперь смотрим *p не равно 0 значит там лежит не нулевое значение то бишь ИСТИНА если там лежит 0 значит ЛОЖЬ
эти записи равны
C++
1
2
if(*p!=0)
if(*p)
но вторая короче
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
или знак && означает ноль
знак && означает логическое "И"
0
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
20.05.2016, 19:57  [ТС]
ValeryS,

while(*p != ' ' && *p)
пока (значение по адресу указателя p не равно пробелу и [............]

Где тут сказано что не равно нулю ????????????????????????
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.05.2016, 20:09
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
Где тут сказано что не равно нулю ????????????????????????
вот здесь
Цитата Сообщение от MRG_Serejka Посмотреть сообщение
*p
я же писал что это аналог
C++
1
while(*p != ' ' && *p!=0)
так понятней?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2016, 20:09
Помогаю со студенческими работами здесь

Объясните доступным языком пару строк кода
что обозначает подобный код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int** createInt(int m,int n) { ...

Разъясните пару моментов по теории
1)Какими соображениями руководствуется разработчик, выбирая как ему прилинковывать написанные им же библиотеки: статически или динамически?...

Разъясните, пожалуйста, пару вещей
Так как я в wordpress'e дуб-дубом, у меня возникла пара вопросов, но решений найти не смог: 1. Как сделать категории?(в панели управления...

Новичок, разъясните код (пару строк всего)
Начал учить пайтон 3.х по книге Майкла Доусена &quot;программируем на пайтон&quot;. В главе 6 есть пример написания игры...

Разъясните пожалуйста про метод написания кода
Разъясните пожалуйста про метод написания кода. Я наткнулся вот на такую вещь: https://github.com/f1nder/CliCrawler начал...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru