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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Bolt, 3 окт 2010.

  1. Bolt

    Bolt Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Проверять то, что ввел пользователь
     
  3. astronom

    astronom Гость

    И правильно делают. Чем раньше это войдет в привычку, тем лучше.

    деньги в зачетку, не?
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну как бы сильно не заморачиваться не получиться (ну если там к примеру конечно не использовать 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'
     
Загрузка...

Поделиться этой страницей