Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
#1

Как проверить, является ли переменная числом

18.09.2016, 18:33. Просмотров 656. Ответов 14
Метки нет (Все метки)

Есть структура точки
C++
1
2
3
4
struct Point {
    double x;
    double y;
};
Есть вектор из структур
C++
1
vector<Point> V;
Считывание координат из файла
C++
1
2
3
4
5
6
ifstream in("input.txt");
Record tmp;
while (in >> tmp.x >> tmp.y)
        {
            V.push_back(tmp);
        }
При считывании из файла нужно как-то проверить, являются ли координаты x и y числами. Если они не числа (строки и т.п.), то вывести ошибку. isdigit не подойдет, ведь нужно проверить сразу число, а не отдельную цифру.

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2016, 18:33
Ответы с готовыми решениями:

Проверить является ли переменная числом
Проверить, является ли переменная числом в C++ Builder не охота в цикл...

Проверить является ли строка числом
Задание такое (определите, состоит ли хотя бы одна из строк S1, S2 и S3 только...

Проверить, является ли ввод вещественным числом
Нужно проверить, является ли ввод std::cin вещественным числом. Есть функция...

Проверить, является ли введенное значение числом
int tmp; cout&lt;&lt;&quot;vvedite chislo&quot;; cin&gt;&gt;tmp; как проверить является ли...

Проверить, является ли введенная строка восьмеричным числом
Добрый вечер! Помогите пожалуйста. Написать программу которая проверяет...

14
Croessmah
++Ͻ
14364 / 8146 / 1533
Регистрация: 27.09.2012
Сообщений: 20,077
Записей в блоге: 3
Завершенные тесты: 1
18.09.2016, 18:37 #2
papkapapka321, проверять поток на ошибки после каждого чтения.
0
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 18:39  [ТС] #3
Croessmah, не подскажете, как это сделать? ни разу с этим не сталкивался
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 18:42 #4
Вот это - уже проверка:
Цитата Сообщение от papkapapka321 Посмотреть сообщение
C++
1
while (in >> tmp.x >> tmp.y)
Будет выход если не числа, будет выход когда все данные считаются.
2
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 18:51  [ТС] #5
nd2, Если во входном файле есть что-то не из разряда чисел, то программа просто падает.
0
GbaLog-
Любитель чаепитий
3160 / 1466 / 462
Регистрация: 24.08.2014
Сообщений: 5,190
Записей в блоге: 1
Завершенные тесты: 2
18.09.2016, 18:53 #6
papkapapka321, Падает кидая ексепшон или просто крашится?
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 18:54 #7
Падать она может и по другой причине.
0
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 18:55  [ТС] #8
GbaLog-,
debug assertion failed!
expression: vector subscript out of range

Если во входном файле числа, то программа считывает и работает правильно. Иначе - вот эта ошибка.
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 19:00 #9
Цитата Сообщение от papkapapka321 Посмотреть сообщение
expression: vector subscript out of range
Кода больше покажи. Эта ошибка не на тему: числа - не числа.

Добавлено через 2 минуты
Наверное, в вектор ничего не поместилось (потому что не числа были), а ты по индексу к пустому вектору обращаешься.
0
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 19:03  [ТС] #10
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 "stdafx.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
#include <string>
#include <cctype>
#include <algorithm>
#include <cstdlib>
 
using namespace std;
 
struct Record {
    double x;
    double y;
};
 
vector<Record> V;
 
int main()
{
 
    ifstream in("file.txt");
    ofstream out("output.txt");
    Record tmp;
    if (in.is_open()) {
        while (in >> tmp.x >> tmp.y)
        {
            V.push_back(tmp);
        }
}
}
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 19:08 #11
Тут не может быть этой ошибки:
Цитата Сообщение от papkapapka321 Посмотреть сообщение
vector subscript out of range
Дальше что делаешь с вектором?
0
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 19:14  [ТС] #12
nd2, дальше идет куча функций, но если их закомментировать, то ничего не меняется
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 19:16 #13
Цитата Сообщение от papkapapka321 Посмотреть сообщение
но если их закомментировать, то ничего не меняется
Выложенный код будет работать без ошибок вне зависимости от содержимого файла. Вот это проверь в функциях:
Цитата Сообщение от nd2 Посмотреть сообщение
Наверное, в вектор ничего не поместилось (потому что не числа были), а ты по индексу к пустому вектору обращаешься.
0
papkapapka321
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 36
18.09.2016, 19:44  [ТС] #14
nd2, а можно на этапе считывания этого избежать? например, вместо числа считался символ => программа останавливается => вывелась ошибка "invalid input"
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
18.09.2016, 19:49 #15
Цитата Сообщение от papkapapka321 Посмотреть сообщение
а можно на этапе считывания этого избежать?
Если у тебя возникает такая ошибка:
Цитата Сообщение от papkapapka321 Посмотреть сообщение
vector subscript out of range
- значит код кривой.
Найди, через отладчик, в какой строке эта ошибка возникает.
0
18.09.2016, 19:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2016, 19:49

Проверить является ли сумма цифр числом меньшим 15
дано трехзначное целое число. составить программу, которая определяет ,является...

Проверить, является ли k-й элемент массива чётным числом
Дан массив из n элементов. Необходимо проверить, является ли k-й элемент...

Проверить является ли строка целым отрицательным числом
3. Написать программу, которая проверяет, является ли введенная с клавиатуры...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru