Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 09:28   #1
Анжелика-конст
Пользователь
 
Регистрация: 10.03.2013
Сообщений: 12
По умолчанию Защита от дурака на Си

Подскажите, как правильно сделать защиту от ввода символов? и нужно ли проверку вставлять после определения каждой переменной или можно задать для всех сразу?
Анжелика-конст вне форума Ответить с цитированием
Старый 10.03.2013, 10:53   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

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

Если в случае неправильного ввода нужно сообщить об этом пользователю, то целесообразнее делать это сразу, а не после того, как он введет все значения. Тем более, что и технически это сделать проще.

Кроме того, поле ввода можно настроить таким образом, чтобы оно принимало только цифры. Правда, это эффективно лишь в случае целых чисел.
s-andriano вне форума Ответить с цитированием
Старый 10.03.2013, 11:23   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хотелось бы прежде всего услышать само задание где эта проверка якобы требуется.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2013, 15:30   #4
Анжелика-конст
Пользователь
 
Регистрация: 10.03.2013
Сообщений: 12
По умолчанию

в задании не написано проводить проверку, но преподаватель требует. Точней, просто вводит вместо чисел буквы... Если я кину код программы, сможете, подсказать?..

можете пример привести?..

Последний раз редактировалось Stilet; 10.03.2013 в 16:05.
Анжелика-конст вне форума Ответить с цитированием
Старый 10.03.2013, 16:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну показывай свой код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2013, 16:08   #6
Анжелика-конст
Пользователь
 
Регистрация: 10.03.2013
Сообщений: 12
По умолчанию

Код:
#include<stdio.h>
#include<iostream>
#include <conio.h>
#include<math.h>
int main(){
setlocale(0,"");
float a,b,c,x1,x2,x,dx,F;
int l=1;
int const lines=100;
const float eps=0.000001;
	printf("Введите число a:\n");
	scanf("%f",&a);
	printf("Введите число b:\n");
	scanf("%f",&b);
	printf("Введите число c:\n");
	scanf("%f",&c);
		do{
		printf("Введите число x1:\n");
		scanf("%f",&x1);
		printf("Введите число x2>=x1:\n");
		scanf("%f",&x2);
		if (x2<x1) {
		printf ("Ошибка! Введите x2>=x1\n");}
		} while(x2<x1);
printf("Введите число dx<=abs(x2-x1): \n");
scanf("%f",&dx);
if (dx>fabs(x2-x1)) 
{
printf ("Ошибка! Введите dx<=abs(x2-x1): \n");
} 
		printf(" ___________________________  \n");
		printf("|    x        |    F        | \n");
		printf("|___________________________| \n");

	while(dx>fabs(x2-x1));
	x=x1;
	while ((x<=x2)&&(l<=lines))
{{
	
if ((x!=0)&&(a<0)){
F=a*x*x+b*b*x;
printf ("| %11.3lf | %11.3lf | \n",x,F);
printf("|___________________________|\n");}

	else if ((a>0)&&(x==0)){ 
		if ((x-c)==0){
		printf ("| %11.lf | ошибка      | \n",x);
		printf("|___________________________|\n");}
			else{ F=(x-(a/(x-c)));}
			printf ("| %11.3lf | %11.3lf | \n",x,F);
			printf("|___________________________|\n");}
	}
else if (x==eps){
printf ("| %11.lf | ошибка      | \n",x);
printf("|___________________________|\n");}

	else if (c==0){
		printf ("| %11.lf | ошибка      | \n",x);
		printf("|___________________________|\n");
		if (c!=0)
		{ F=1+x/c;
		 
		printf ("| %11.3lf | %11.3lf | \n",x,F);
		printf("|___________________________|\n");
		}}
		
l=l+1;
x=x+dx;
if (l==11){
	printf ("нажмите enter  для продолжения \n");
	_getch();
	l=1;
}}
return 0;
}
не судите строго, только начала изучать Си

Последний раз редактировалось Stilet; 10.03.2013 в 16:50.
Анжелика-конст вне форума Ответить с цитированием
Старый 10.03.2013, 16:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Вот общий случай:
Код:
printf("Введите число a:\n");
while(scanf("%f",&a)!=1) printf("Введенное не число. Вводите заново: ");
scanf возвращает число успешно преобразованных вводов. Указывать его будешь самостоятельно в зависимости от того сколько пременок хочешь ввести.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2013, 17:05   #8
Анжелика-конст
Пользователь
 
Регистрация: 10.03.2013
Сообщений: 12
По умолчанию

то есть, вместо этого
Код:
printf("Введите число a:\n");
	scanf("%f",&a);
вставить это
Код:
printf("Введите число a:\n");
while(scanf("%f",&a)!=1) printf("Введенное не число. Вводите заново: ");
..

так оно бесконечный цикл выдает...

Последний раз редактировалось Stilet; 10.03.2013 в 17:28.
Анжелика-конст вне форума Ответить с цитированием
Старый 10.03.2013, 17:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Согласен. Недодумал:
Код:
	printf("Введите число a:\n");
	while(scanf("%f",&a)!=1) {
		printf("Введенное не число. Вводите заново: ");
		flushall();
	}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2013, 17:37   #10
Анжелика-конст
Пользователь
 
Регистрация: 10.03.2013
Сообщений: 12
По умолчанию

Спасибо. Помогло)
Анжелика-конст вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита от дурака на СИ mazila2507 Общие вопросы C/C++ 1 17.09.2012 12:09
Защита от дурака на СИ Jen94 Помощь студентам 1 12.09.2012 15:30
защита от дурака на builder6 sergi Помощь студентам 2 24.04.2012 21:13
защита от дурака phasha Помощь студентам 5 03.10.2011 11:45
Защита от дурака Ericnex Помощь студентам 2 13.04.2011 18:35