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

Считывание координат точки - C++

Восстановить пароль Регистрация
 
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 09:03     Считывание координат точки #1
Как можно реализовать чтение точек (их двумерных координат) так, чтобы не было неверного заполнения, а именно, в данном коде при вводе 2-х точек, а также координаты х и вместо у -- какой-то буквы программа работает неверно, т.е. ошибка ввода очевидна, но программа работает на этих входных данных
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
float X[n_sz];
    float Y[n_sz];  
while (cin.good())
 
{
        if (i > 999) 
        {
            cout << message4;
            i = 999;
            break;
        }
        cout<<"Введите x"<<i<<", y"<<i<<": ";
        cin >> X[i]; 
        cin >> Y[i];
        cout << X[i] << " "<<Y[i]<<endl;
        cout<<endl; 
        
        ++i;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 09:03     Считывание координат точки
Посмотрите здесь:

Создание проги, по вычисление координат точки. C++
C++ Многократный ввод координат точки
C++ массивы, плоскость, и расстояние от точки до центра координат
C++ Определить номер точки, через которую проходит окружность с центром в начале координат, внутрь которой попадают все оставшиеся точки.
Точки в системе координат. Visual Studio C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 09:10     Считывание координат точки #2
C++
1
2
3
4
5
6
7
float a;
while (!(cin >> a) || (cin.peek() != '\n'))
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Error!" << endl;
}
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 12:04  [ТС]     Считывание координат точки #3
alsav22, прокомментируйте, пожалуйста, ваш код
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 12:38     Считывание координат точки #4
Нужен фильтр ввода данных
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 12:49  [ТС]     Считывание координат точки #5
Получился такой код, но работает не верно: считывает даже буквы
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
    bool endr = false;
    while (!endr)
    {
        while (!(cin >> X[i] >> Y[i]) || (cin.peek() != '\n'))
        {
            cin.clear();
            while (cin.get() != '\n');
            endr = true;
        }
        if (!endr)
            ++i;
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 13:01     Считывание координат точки #6
Цитата Сообщение от Bohes2013 Посмотреть сообщение
но работает не верно: считывает даже буквы
Откуда видите?
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 13:06  [ТС]     Считывание координат точки #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда видите?
Я запустил этот код, сначала я вводил пары чисел -- i инкрементировалась, затем я попробовал вводить буквы -- никаких ошибок, продолжался ввод.

Добавлено через 1 минуту
После замены while на if ввод начал работать правильно
C++ (Qt)
1
if (!(cin >> X[i] >> Y[i]) )
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.03.2014, 13:08     Считывание координат точки #8
C++
#include <stdio.h>
#include <string.h>
 
int main() 
{
  char s[2][32];
  scanf("%s %s", s[0], s[1]);
  
  for(int j = 0; j < 2; j++)
    for(int i = 0; i < strlen(s[j]); i++)
      if(s[j][i] != '.')
        if(s[j][i] < '0' || s[j][i] > '9')
          printf("oshibka\n");
 
  printf("%s %s\n", s[0], s[1]);
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 13:17     Считывание координат точки #9
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
#include <stdlib.h>
#include <iostream>
using namespace std;
 
void input(float* X, int n_sz)
{
    int i = 0;
    while (i < n_sz)
    {
        while (!(cin >> X[i]) || (cin.peek() != '\n'))
        {
            cin.clear();
            while (cin.get() != '\n');
            cout << "Error!" << endl;
        }
        ++i;
    }
    cout << "Done!" << endl << endl;
}
 
 
int main()
{
    const int n_sz = 5;
    
    float X[n_sz];
    float Y[n_sz]; 
    
    cout << "Enter to X " << n_sz << " float" << endl;
    input(X, n_sz);
    cout << "Enter to Y " << n_sz << " float" << endl;
    input(Y, n_sz);
    
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Bohes2013 Посмотреть сообщение
После замены while на if ввод начал работать правильно
А разница? Тут, вообще, нужно ввод по отделности проверять, в X может быть правильным, а в Y неправильным, и наоборот.

Добавлено через 3 минуты
programina, человек ввод float проверяет.
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 13:17  [ТС]     Считывание координат точки #10
Цитата Сообщение от alsav22 Посмотреть сообщение
А разница? Тут, вообще, нужно ввод по отделности проверять, в X может быть правильным, а в Y неправильным, и наоборот.
Если хотя бы одна из координат не число, то это значит, что нужно завершить ввод (Число точек заранее не известно)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 13:19     Считывание координат точки #11
Цитата Сообщение от Bohes2013 Посмотреть сообщение
я попробовал вводить буквы -- никаких ошибок, продолжался ввод.
А где у вас собщение об ошибке в коде? Ввод и будет продолжаться, пока правильно не введёте.

Добавлено через 1 минуту
Цитата Сообщение от Bohes2013 Посмотреть сообщение
Если хотя бы одна из координат не число, то это значит, что нужно завершить ввод (Число точек заранее не известно)
А раньше об этом не могли сообщить?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.03.2014, 13:19     Считывание координат точки #12
alsav22, float нельзя представить строкой?
Bohes
4 / 3 / 0
Регистрация: 10.07.2011
Сообщений: 310
Записей в блоге: 1
13.03.2014, 13:20  [ТС]     Считывание координат точки #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Ввод и будет продолжаться, пока правильно не введёте.
Да, я уже разобрался. alsav22, спасибо за помощь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 13:22     Считывание координат точки
Еще ссылки по теме:

C++ Считывание координат (x;y) курсора мышки
C++ Вычисление координат точки после поворота. SFML
C++ Считывание координат в бинарном файле

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

Или воспользуйтесь поиском по форуму:
alsav22
13.03.2014, 13:22     Считывание координат точки
  #14

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
float нельзя представить строкой?
При выводе на консоль он так и предстаёт, но зачем усложнять и переливать из пустого в порожнее?

Yandex
Объявления
13.03.2014, 13:22     Считывание координат точки
Ответ Создать тему
Опции темы

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