Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 06.06.2011, 17:36   #1
zhuzhik
Новичок
 
Регистрация: 06.06.2011
Сообщений: 3
Репутация: 10
По умолчанию проверка корректности введенных данных, С/C++

Здравствуйте, возникла такая проблема - в программе, на языке Си, необходимо реализовать проверку корректности введенных пользователем данных, то бишь чтобы например если пользователь вводит с клавиатуры вместо цифры букву, то выскакивала ошибка. Попробовал реализовать её через try/catch, но если ввести букву, то программа все равно продолжает работать и в итоге просто выдает ошибочные значения. Подскажите пожалуйста что необходимо добавить/исправить чтобы все заработало так как надо, или может быть какой-нибудь другой метод реализации такой проверки. Используемый компилятор Visual Studio 2010.Вот сам код программы:
Цитата:
#include "stdafx.h"
#include "conio.h"
#include <math.h>
#include <stdlib.h>
#define N 5

void matrix_n_vector (float m[][N], float v[],float res[],int n)
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
res[i] = 0;
for(int k = 0; k < n; k++)
res[i] += (m[i][k] * v[k]);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
int n,i,j;
float v, a[N][N];

printf ("Vvedite poryadok matrici: ");
scanf("%d",&n);
if ( N < n )
{
printf( "Slishkom bolshoi poryadok matrici\n" );
getch();
return 0;
}
printf("\nVvedite sistemu\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
try { //проверка корректности введенных данных
scanf("%f",&v);
a[i][j] = v;
}
catch(...) {
printf("Error");
}
}
system("cls");
printf("matrix:\n");
for(i=0; i<n; i++)
{
printf("\n");
for (j=0; j<n; j++)
printf("%2.2f ",a[i][j]);
}
int iter=0;
float L=0, Lprov, Xn1[N],Xn[N];
for (int i=0; i<n; i++) Xn[i]=1;
do
{
iter++;
Lprov=L;
matrix_n_vector(a, Xn, Xn1,n);
L=Xn1[0]/Xn[0];
for (int i=0; i<n; i++) Xn[i]=Xn1[i];
}
while ((fabs(L-Lprov))>=0.1);
printf("\n\nvektor:\n");
for(i=0; i<n; i++)
{
printf("%2.2f ",Xn1[i]);
}
printf ("\n\nL = ");
printf ("%f", L);
printf ("\n\niteracii = ");
printf ("%d", iter);
getch();
return 0;
}
zhuzhik вне форума   Ответить с цитированием
Старый 06.06.2011, 18:01   #2
Mandrivnyk
Software Developer
Профессионал
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Адрес: Stuttgart
Сообщений: 1,098
Репутация: 119

icq: 260063504
По умолчанию

Библиотечная функция isdigit.
Код:

#include <cctype> // для C -- <ctype.h>

__________________
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума   Ответить с цитированием
Старый 06.06.2011, 20:13   #3
zhuzhik
Новичок
 
Регистрация: 06.06.2011
Сообщений: 3
Репутация: 10
По умолчанию

ой, извините, неудачно сформулировал - там не просто цифра, а число вводится. То есть функция isdigit если например ввести двузначные или десятичные будет ноль возвращать. Можно конечно считывать введенные данные как строку, и пробегать ее этой функцией...но все таки должен быть более рациональный способ

Последний раз редактировалось zhuzhik; 06.06.2011 в 20:23.
zhuzhik вне форума   Ответить с цитированием
Старый 09.06.2011, 20:41   #4
zhuzhik
Новичок
 
Регистрация: 06.06.2011
Сообщений: 3
Репутация: 10
По умолчанию

если кому надо будет в будущем, нашел самый простой и неплохо работающий способ:
Цитата:
if (scanf("%f",&v)!=1)
{
printf("Oshibka vvoda");
getch();
return 0;
}
при вводе переменной v, отличной от типа float, будет выдавать ошибку
zhuzhik вне форума   Ответить с цитированием
Старый 30.05.2012, 16:22   #5
fry.farnsworth
Новичок
 
Регистрация: 14.01.2012
Адрес: Ukraine L'vov
Сообщений: 3
Репутация: 10
По умолчанию

А как сделать проверку, на присутствие цыфр в строке?
fry.farnsworth вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроль корректности ввода данных SergSpectr Assembler 3 23.12.2010 12:27
проверка введенных данных ayPinki JavaScript, Ajax 2 28.11.2010 12:18
Проверка корректности заполнения формы True_girl JavaScript, Ajax 1 05.06.2010 08:02
Проверка введенных данных viscas PHP 4 01.06.2009 02:41
проверка введенных данных Elm0 Общие вопросы Delphi 4 19.12.2008 20:00


22:51.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru