 |
Проверка вводимых данных - Вопросы и ответы, обсуждения - Ваши вопросы по C/C++ только в данном разделе |
20.11.2013, 11:22
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 12.01.2011
 Сообщений: 24
 Популярность: -20
 Сказал(а) спасибо: 19
Поблагодарили 6 раз(а) в 6 сообщениях
|
Проверка вводимых данных
Делаю программу, в которой нужен контроль введенных данных, то есть чтобы в массив можно было ввести только число. Начал делать через atoi, вроде все хорошо, если бы не одно НО: atoi превращает буквенную строку в 0, и когда я просто ввожу 0 программа выдает ошибку. Как можно дописать этот код или предложите другой способ проверки...Вот первая часть программы:
Код:
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "iostream"
#include "stdlib.h"
#include "stdio.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian"); // включение русского языка
const int Nmax=100;
int i, num_max, M[Nmax], Mmax, a,ak;
char ch, N[256], D[256];
do
{
cout << "Введите количество элементов целочисленного массива N, (N<=" << Nmax << ") :";
cin >> N;
a = atoi(N);
if (a==0 || a>100)
do
{
cout << "строка введена неверно, введите строку еще раз!" << endl;
cin >> N;
a = atoi(N);
}while (a==0 || a>100);
cout << endl;
for (i=0; i<a; i++)
{
cout << "Введите элемент A[" << i << "]: ";
cin >> D;
ak = atoi(D);
if (ak==0)
do
{
cout << "строка введена неверно, введите строку еще раз!" << endl;
cout << "Введите элемент A[" << i << "]: ";
cin >> D;
ak = atoi(D);
}while (ak==0);
M[i] = ak;
}
|
|
|
20.11.2013, 21:50
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 01.05.2011
 Сообщений: 17
 Популярность: 159
 Сказал(а) спасибо: 9
Поблагодарили 4 раз(а) в 4 сообщениях
|
Re: Проверка вводимых данных
Попробуй вместо
написать
Код:
if (N=="0") a = 0;
else a = atoi(N);
и вместо
написать
Код:
if (D=="0") ak = 0;
else ak = atoi(D);
|
|
|
25.11.2013, 08:43
|
#3
|
|
|
|
Пехотинец
|
 Регистрация: 07.07.2012
 Сообщений: 60
 Популярность: 171
 Сказал(а) спасибо: 3
Поблагодарили 11 раз(а) в 10 сообщениях
|
Re: Проверка вводимых данных
1. Проверка на цифру + перевод в число :
Код:
#include <ctype>
...
for(int i=0; i < sizeof(N) ;i++)
{
if (isdigit(N[i]))
a = a*10 + (N[i] - '0');
}
2. Добавь инициализацию переменных, особенно массивов.
3.
Код:
cin >> N;
a = atoi(N);
if (a==0 || a>100)
do
{
cout << "строка введена неверно, введите строку еще раз!" << endl;
cin >> N;
a = atoi(N);
}while (a==0 || a>100);
Логичней записать так:
Код:
for(;;)
{
cin >> N;
a = atoi(N);
if ((a > 0) && (a <= 100))
break;
cout << "строка введена неверно, введите строку еще раз!" << endl;
}
Последний раз редактировалось twice; 25.11.2013 в 08:49.
|
|
|
25.11.2013, 09:33
|
#4
|
|
|
|
Разведчик
|
 Регистрация: 18.11.2013
 Сообщений: 3
 Популярность: 197
 Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 9 сообщениях
|
Re: Проверка вводимых данных
На будущее - для сравения строк в крестах нужно использовать strcmp (wcscmp для юникода), а не оператор сравнения. В противном случае сравниваются указатели.
Автору - а на каком месте падает хоть? Посмотри в отладчике.
|
|
|
25.11.2013, 18:18
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 12.01.2011
 Сообщений: 24
 Популярность: -20
 Сказал(а) спасибо: 19
Поблагодарили 6 раз(а) в 6 сообщениях
|
Re: Проверка вводимых данных
|
|
|
25.11.2013, 18:30
|
#6
|
|
|
|
Разведчик
|
 Регистрация: 18.11.2013
 Сообщений: 3
 Популярность: 197
 Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 9 сообщениях
|
Re: Проверка вводимых данных
Правильно.
Потому-что должен быть не D=="0" а *D == '0'
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Я пытался делать через isdigit, только при вводе русских букв у меня программа вылетала(
|
|
 |
|
 |
|
Потому-что кириллица - это уже юникод. Попробуй iswdigit
|
|
|
25.11.2013, 18:43
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 12.01.2011
 Сообщений: 24
 Популярность: -20
 Сказал(а) спасибо: 19
Поблагодарили 6 раз(а) в 6 сообщениях
|
Re: Проверка вводимых данных
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Страница для кражи вводимых данных
|
vice73rus |
Вопросы и ответы, обсуждения |
7 |
29.02.2012 21:22 |
[Информация] ПРОВЕРКА!!!
|
lkotikl |
Общение и обсуждение |
18 |
28.10.2010 11:24 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:40.
|
 |