Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для mintcat
0 / 0 / 0
Регистрация: 31.07.2020
Сообщений: 6

Лишний заход в цикл

19.11.2021, 12:12. Показов 1213. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Подскажите, пжл, как убрать один лишний заход в цикл.

Коротко о программе: при вводе North, South, East, West (или просто N, S, E, W) задается направление, а при вводе цифр - количество шагов в этом направлении. В самом конце выводятся конечные координаты.

Задумывалось, что при вводе точки ('.') произойдет выход из цикла ввода пути, но этого не происходит.
Должно выглядеть примерно так:

North 6
South 10
East 3
.

(тут должен быть выход из цикла, но вместо этого приходится ставить еще одну точку и enter)

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
#include <iostream>
#include <string>
 
using namespace std;
 
 
int main() {
    
    setlocale(LC_ALL, "rus");
 
    int x = 0, y = 0, temp;
    string s;
    
    cout << "Введите путь:\n";
 
    bool end = false;
 
    while (!end)
    {
        cin >> s >> temp;
      
        if (s[0] == 'E') x += temp;
        if (s[0] == 'W') x -= temp;
        if (s[0] == 'N') y += temp;
        if (s[0] == 'S') y -= temp;
        if (s[0] == '.') end = true;
    };
 
    cout << "Точные координаты:\n" << x << " " << y << endl;
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2021, 12:12
Ответы с готовыми решениями:

_getch() считывает номер и прогоняет цикл лишний раз
for (int i = 0;i&lt;6; i++) { sim = _getch(); printf(&quot;%c &quot;,sim); sim = 0; } Гетч считает три элемента и после каждого...

Лишний цикл
Доброго времени суток! Возникла весьма интересная ситуация, в методе paintComponent возникла проблема в элементарнейшем цикле ...

Цикл Do-While исполняется лишний раз
Простецкая демонстрация работы цикла do-while вызвала у меня ступор. Система просит ввести символ, и, если он не равен заданному,...

4
 Аватар для Серж762
1814 / 885 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
19.11.2021, 12:26
Лучший ответ Сообщение было отмечено mintcat как решение

Решение

Цитата Сообщение от mintcat Посмотреть сообщение
тут должен быть выход из цикла, но вместо этого приходится ставить еще одну точку и enter)
У Вас в программе на ввод передается два параметра
C++
1
cin >> s >> temp;
то есть для выхода из цикла Вы должны передавать не только точку но и цифру (на данном этапе) вот так
Code
1
. 1
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2021, 12:27
Ваш цикл лучше записать так
C++
1
2
3
4
5
6
7
8
9
10
while (1)
{
    cin >> s >> temp;
 
    if (s[0] == '.') break;
    if (s[0] == 'E') x += temp;
    if (s[0] == 'W') x -= temp;
    if (s[0] == 'N') y += temp;
    if (s[0] == 'S') y -= temp;        
}
1
 Аватар для Серж762
1814 / 885 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
19.11.2021, 12:37
Мое виденье кода
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
#include <iostream>
#include <string>
 
using namespace std;
 
 
int main() {
    
    setlocale(LC_ALL, "rus");
 
    int x = 0, y = 0;
    char s[2];
    
    cout << "Введите путь:\n";
 
    while (1)
    {
        cin >> s;
      
        if (s[0] == 'E') x += (int)s[1] - 48;
        if (s[0] == 'W') x -= (int)s[1] - 48;
        if (s[0] == 'N') y += (int)s[1] - 48;
        if (s[0] == 'S') y -= (int)s[1] - 48;
        if (s[0] == '.')  break;
    };
 
    cout << "Точные координаты:\n" << x << " " << y << endl;
 
    return 0;
}
Результат
Code
1
2
3
4
5
6
Введите путь:
W6
S3
.
Точные координат�:
-6 -3
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2021, 12:45
Лучший ответ Сообщение было отмечено mintcat как решение

Решение

что касается Вашего вопроса, попробуйте сделать так:
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
#include <iostream>
#include <string>
 
using namespace std; 
 
int main() {
    
    setlocale(LC_ALL, "rus");
 
    int x = 0, y = 0, temp;
    string s;
    
    cout << "Enter s,temp ('.' - exit):\n";   
 
    while (1)
    {
        cin >> s; 
        if (s[0] == '.') break;
        cin >> temp;
      
        if (s[0] == 'E') x += temp;
        if (s[0] == 'W') x -= temp;
        if (s[0] == 'N') y += temp;
        if (s[0] == 'S') y -= temp;       
    }
 
    cout << x << " " << y << endl;
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2021, 12:45
Помогаю со студенческими работами здесь

Как убрать лишний цикл
Sub CopyDoc() Dim d As Document Dim s As Shape Dim Lg As Layer Set s = ActiveShape For Each d In Application.Documents For...

Убрать лишний цикл foreach
Есть такой скрипт : $link_val_scl=array();$i = 0; foreach($content-&gt;find('table a.scorelink') as $val_link){ $link_scl =...

Алгоритм, вычисляющий восход-заход солнца и восход-заход луны.
Найден алгоритм, написанный на BASIC и вычисляющий восход-заход солнца и восход-заход луны. Есть ли смысл перенести это детище на АСМ? ...

Подскажите как улучшить код (убрать лишний цикл)
Всем доброго времени суток! Есть программа которая делает гистограмму изображения. Все уже работает,но нужно чуть допилить пару моментов...

VBA стандартный поиск .FindNext цикл выполняется лишний раз нормально ли это?
делаю скрипт для нашей бухгалтерии и столкнулся с непонятной фигней: есть таблица в которой могут быть месяца с разными расходами а могут и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru