• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проверка на дурака

  • Автор темы Bolt
  • Дата начала
B

Bolt

В универе начали изучение СИ так вот дали 6 прог (2 лабы, осилил пока только 1), Вся загвоздка в проверке на дурака. Заставляют делать к каждым программам. Суть в том что если ты должен вводить цифры прога принимала только цифры и ничего больше, если нужны буквы то только буквы. Как это можно сделать сильно не заморачивясь????
 
E

European

Проверять то, что ввел пользователь
 
A

astronom

D

DarkKnight

Ну как бы сильно не заморачиваться не получиться (ну если там к примеру конечно не использовать VCL Борланда или MFC Микрософта :),
а так принцип не сложен...

C++:
#include <iostream>
#include <ctype.h>
#include <string.h>

using namespace std;


int main(void)
{
char sInt[12]; //Буфер, массив символов в которую в первую очередь будем вводить данные с клавы
int resInt; //Итоговое целочисленное значение
bool isIntTrue = false; //Переменная для выхода из цикла ввода с клавиатуры
while (!isIntTrue) //Пока не введено верное по синтаксису число выполнять:
{
cout<<"Input sInt : "; //Диалог нач. ввода
gets(sInt); //получим буфер (в идеале защищаем от переполнения) например с помощью strncpy

isIntTrue = true; //Утверждаем (Предположем) что введено вверное число по синтакцису (ОТ ПРОТИВНОГО)
for (int i=0; i<strlen(sInt);i++) //Перебираем каждый символ в буфере 
{
if (i == 0 && sInt[0] == '-') continue; //У нас может быть отрицательное число
//Следовательно если первый символ в массиве симоволов (наш буфер) символ "-" (минус)
//то переходим к сл. итерации
if (isdigit(sInt[i]) == 0) //isdigit (char CH) - возвращает 0 если CH - не код цифры(0..9)
{
isIntTrue = false; //один из символов не цифра и мы отвергаем наше предположение
cout<<endl<<"["<<sInt<<"]"<<" - Not integer"<<endl; 
break;// Завершаем цикл for, нам не зачем проверять дальше, мы уже не сможем преобразовать
}
}
}
resInt = atoi(sInt); //Преобразовываем в целочисленное значение и присваиваем нашей переменной

cout<<"You input integer = "<<resInt;


}
Ну вот так примерно... По аналогии можно сделать для вещественных, только там еще нужно проверять на точку (причем она должна встречаться единожды),
ну а проверять строковые данные смысла вообще нет (конечно, если тебе не нужно что бы строка не содержала ни одной цифры или ни одного знака припинания, если же так, то так же по аналогии, а лучше просто из строки убрать не нужные символы '\0'
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!