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

почему? - C++

Восстановить пароль Регистрация
 
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
11.12.2013, 18:54     почему? #1
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
using namespace std;
int main()
{
    int k;
    char str[100];
    char str1[50] = { 0 }, str2[50] = { 0 };
    cout << "Vvedite stroky" << endl;
    gets_s(str);
    cout << "Vvedite k" << endl;
    cin >> k;
    while (str[k] != ' '&& k>0)
        k--;
 
    strncpy_s(str1, str, k);
    strcpy_s(str2, str + k);
 
    cout << "1-" << str1 << endl;
    cout << "2-" << str2 << endl;
    system("pause");
    return 0;
}
Объясните почему здесь while (str[k] != ' '&& k>0) нужно указывать условие k>0. Препод сказал что оно здесь не нужно , а без него программа работает криво. и что вообще этот цикл делает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 18:54     почему?
Посмотрите здесь:

Почему не взяли на обучение в CQG, на сайте нашел испытательное задание, сделал и отослал. Не взяли и не объяснили почему. Хочу услышать мнения. C++
Почему MS-DOS не любит кириллицу ? (Или почему она не любит меня ?) C++
Почему z=2 , а b=1? C++
Участок B кода выполняется позже, чем участок A кода, но почему-то B влияет на работоспособность A! Почему? C++
C++ Почему 0?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lpvoid
 Аватар для lpvoid
318 / 301 / 17
Регистрация: 06.03.2013
Сообщений: 869
11.12.2013, 18:57     почему? #2
Lexa_Okatow, потому что не бывает отрицательных элементов в массиве. строка - массив.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
11.12.2013, 19:04     почему? #3
Это своеобразное разбиение строки на токены.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,197
Завершенные тесты: 1
11.12.2013, 19:04     почему? #4
Здесь разумно выражения поменять местами,
чтобы при k<0 не вычислялось str[k]
C++
1
2
3
if(k>=strlen(str))
     k=strlen(str)-1; 
while (k>0 && str[k] != ' ')
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
11.12.2013, 19:09  [ТС]     почему? #5
дело в том что у меня во второй строке выводит какой то бред, если я убираю k>0, препод сказал что оно здесь не нужно, во ткак мне ему объяснить что он не прав?
lpvoid
 Аватар для lpvoid
318 / 301 / 17
Регистрация: 06.03.2013
Сообщений: 869
11.12.2013, 19:09     почему? #6
Lexa_Okatow, загружайте изображения на форум.
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
11.12.2013, 19:20  [ТС]     почему? #7
Цитата Сообщение от lpvoid Посмотреть сообщение
Lexa_Okatow, загружайте изображения на форум.
http://rghost.ru/50895140/image.png

http://rghost.ru/50895199/image.png
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2013, 21:29     почему?
Еще ссылки по теме:

C++ IDE wxDev-C++, при создании кнопки на форме она почему-то становится во весь экран, почему?
C++ почему 3.?
C++ Почему выводится в виде таблицы и почему не работает сортировка

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,197
Завершенные тесты: 1
11.12.2013, 21:29     почему? #8
Цитата Сообщение от Lexa_Okatow Посмотреть сообщение
как мне ему объяснить что он не прав
Если больше пробелов не окажется, то цикл надо завершить на самом первом символе
(т.е. когда k=0 получим первое слово).
Yandex
Объявления
11.12.2013, 21:29     почему?
Ответ Создать тему
Опции темы

Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru