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

Помогите разобраться - C++

Восстановить пароль Регистрация
 
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 17:21     Помогите разобраться #1
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ.
Допустим я ввожу
North 5
East 3
South 1
Вывод х=3, у=4.
Код
#include <iostream>
#include <cstring>

using namespace std;

int main(){
  int n;
  int k=0;int x=0,y=0;
  char str[100];

  
    while(cin>>str>>n){

  if(!strcmp(str,"North"))  
  y=n;
  if(!strcmp(str,"South"))
    y=y-n;
  if(!strcmp(str,"East"))
    x=n;
  if(!strcmp(str,"West"))
     x=x-n;
  }        
  
  cout<<x<<" "<<y<<" ";
  return 0;}
Добавлено через 2 минуты
Я ввожу данные, но чтоб вывести результат мне нужно ввести еще 2 строки, как сделать как в примере
North 5
East 3
South 1
Вывод
3 4
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 17:39     Помогите разобраться #2
Вообще странно почему она у тебя выдает результат.
Мне кажется что твоя прога должна войти в вечный цикл.
while(cin>>str>>n) - вызывает подозрение. Какое у тебя условие выхода из цикла?
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 17:41  [ТС]     Помогите разобраться #3
Я же написал я ввожу данные координат North
East и другие координаты потом приходится вводить две любые строки.
Я и прошу в этом помочь.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 17:47     Помогите разобраться #4
Кажется я понял cin>>str>>n пытается прочитать строку, потом число. Так как ты в конце вводишь 2 строки она первую воспринимает как строку, вторую пытается преобразовать в число, но преобразовать вторую строку в число не может. По этой ошибке cin>>str>>n возвращает false и цикл завершается.

Подумай, когда тебе надо завершить цикл, как я понимаю когда все координаты введены. Этого нет в твоей проге.
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 17:50  [ТС]     Помогите разобраться #5
Да вы правы программа работает, выводит координаты Х и У. Но мне нужно чтобы ввод был без двух доп. строк.
Допустим я ввожу
North 5
East 3
South 1 и приходится вводить еще ну допустим s
fhads
vsdgs
Вывод 3 4
Подумай, когда тебе надо завершить цикл, как я понимаю когда все координаты введены. Этого нет в твоей проге.
Вот как раз это я не могу сделать.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 17:58     Помогите разобраться #6
Может попробовать переписать программу попроще, без циклов:
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main(){
  int n;
  int k=0;int x=0,y=0;
  char str[100];
 
  cout << "input North"
  cin >> n;
  y=n;
 
  cout << "input South"
  cin >> n;
  y=y-n;
 
  cout << "input East"
  cin >> n;
  x=n;
 
  cout << "input West"
  cin >> n;
  x=x-n;
 
  cout<<x<<" "<<y<<"\n";
  return 0;}
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 18:02  [ТС]     Помогите разобраться #7
Хороший вариант), я так делал, но есть условия, смотрите на Ввод и вывод.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 18:04     Помогите разобраться #8
Цитата Сообщение от Busterr Посмотреть сообщение
Да вы правы программа работает, выводит координаты Х и У. Но мне нужно чтобы ввод был без двух доп. строк.
То что твоя программа работает - это чистая случайность. У тебя неправильное условие завершения цикла.
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 18:09  [ТС]     Помогите разобраться #9
Я ведь и прошу с этим помочь, что непонятно
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 18:10     Помогите разобраться #10
Я попробую пофиксить твою прогу если ты мне объяснишь в каком случае ввод должен закончится и должен быть выведен результат?
у тебя в примере например вводится только North East South но не вводится West.
Что должна делать прога если например North введут 2 раза?
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 18:16  [ТС]     Помогите разобраться #11
Нет скорее всего ввод только один раз. Либо одна сторона света либо две .. до четырех.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 18:33     Помогите разобраться #12
Ок, тогда расскажи как после того как ты ввел первую сторону света мы узнаем хочешь ты вводить вторую или не хочешь?
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
31.10.2011, 18:39  [ТС]     Помогите разобраться #13
Такое чувство, что ты хочешь натолкнуть меня на какое-то решение. Но я не знаю, поэтому и зашел на форум. Ты можешь и не использовать while, если у тебя есть другие идеи.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
31.10.2011, 18:49     Помогите разобраться #14
Нет, я хочу сам понять что надо сделать. Пока не понятно что сделать, понять как сделать нельзя.

Компьютер никак не сможет сам догадаться есть ли у пользователя желание продолжить ввод после того как он вводит одну сторону света. Компьютер либо должен заранее знать сколько сторон света введет пользователь, либо пользователь должен как то просигналить о том что он закончил ввод.

Для начала надо понять как должна работать программа, а потом уже писать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 12:43     Помогите разобраться
Еще ссылки по теме:

C++ Помогите разобраться с итераторами
C++ Помогите разобраться :)
C++ Помогите разобраться с циклом while.

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

Или воспользуйтесь поиском по форуму:
Busterr
-25 / 1 / 0
Регистрация: 25.09.2011
Сообщений: 50
01.11.2011, 12:43  [ТС]     Помогите разобраться #15
Как тогда узнать, в какой момент прекратить ввод и вывести результат?

У вас там будет даваться конечный набор данных,так что цикл завершиться когда данные кончаться - вот и все.

Добавлено через 16 часов 56 минут
Все спасибо я сделал, там была маленькая ошибка
Yandex
Объявления
01.11.2011, 12:43     Помогите разобраться
Ответ Создать тему
Опции темы

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