Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/246: Рейтинг темы: голосов - 246, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 12.04.2012
Сообщений: 20

Защита от дурака. Ввод данных типа int с клавиатуры.

14.04.2012, 02:11. Показов 48252. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данные типа int вводятся с клавиатуры. нужно поставить защиту от дурака. Полазил на форуме нашёл программу:

Цитата Сообщение от usernet009 Посмотреть сообщение
ТС, у потока cin есть failbit. Этот фэилбит становится еденичкой если пользователь ввел что то не так, ну например
cin>>i; // i - int
А пользователь вводит 2.2
в переменную i попадает 2 а failbit становится = 1
И, если ты попробуешь дальше ввести чтото, например
cin>>f; //f - float
то ничего не введется так как failbit уже установлен а ввод может происходить только из "хорошего" потока.
В общем. К чему я все это, попробуй вот так
C++
1
2
3
4
5
6
7
cin>>i;
while(cin.fail() == 1) // cin.fail() возвращает 1 если установлет failbit
{
cout<<"IDIOT !! Enter again !\n";
cin.clear(); // сбрасывает все биты потока, тоесть поток становится "хорошим"
cin>>i;
}
p.s сам только недавно прочитал про эти биты\потоки, так что сильно не пинай если на заработает
по аналогии пытался сделать свою:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <conio.h>
#include <iostream>
 
using namespace std;
 
int main()
{
    int i;
 cin>>i;
while (cin.fail() == 1) // cin.fail() возвращает 1 если установлет failbit
{
cout<<"IDIOT !! Enter again !\n";
cin.clear(); // сбрасывает все биты потока, тоесть поток становится "хорошим"
cin>>i;
}
cout << i;
 getch();
 return 0;
}
но когда в поток вводится, например "gt57" программа зависает в бесконечном цикле, выводя беспрерывно строчки "IDIOT !! Enter again !".

подскажите пожалуйста, где ошибка в цикле?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2012, 02:11
Ответы с готовыми решениями:

Защита от дурака, на ввод "мусора" в int
В общем, пытался сделать защиту на ввод неверного значения. Т.е чтобы вводилось значение не более 5 и не менее 1, и чтобы это было целое...

Ввод/вывод имени и пути файла, а также защита от дурака
Доброго времени суток, господа. Что-то я либо некорректно формулирую запрос в google, либо просто мало чего есть на эту тему. Надо мне...

Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN
помогите пожалуйста, не получается сделать,туго с динамикой. • Описать структуру с именем TRAIN, содержащую следующие поля: • название...

21
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.04.2012, 02:23
grumpy13, всё на много проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    int i;
    cout<<"Enter int : ";
    while(!(cin>>i)) 
    {
        cout<<"IDIOT !! Enter again !\n";
        cin.clear(); // сбрасывает все биты потока, тоесть поток становится "хорошим"
        cin.sync();//Удалим данные из буффера
        cout<<"Enter int : ";
    }
    system("pause");
    return 0;
}
Миниатюры
Защита от дурака. Ввод данных типа int с клавиатуры.  
2
1 / 1 / 0
Регистрация: 12.04.2012
Сообщений: 20
14.04.2012, 02:26  [ТС]
спасибо большое)

нашёл и у себя ошибку. не хватало строки: cin.sync();

с ней мой вариант так же работает.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.04.2012, 02:28
Лучший ответ Сообщение было отмечено как решение

Решение

Ну а вообще посмотри этот пост (тебе код С++)
https://www.cyberforum.ru/blog... omment1451
можешь и блог в целом почитать(только тогда уже весь)
В идеале код должен выглядеть так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    int i;
    cout<<"Enter int : ";
    while(!(cin>>i) || cin.get() != '\n') 
    {
        cout<<"IDIOT !! Enter again !\n";
        cin.clear(); // сбрасывает все биты потока, тоесть поток становится "хорошим"
        cin.sync();//Удалим данные из буффера
        cout<<"Enter int : ";
    }
    system("pause");
    return 0;
}
Почему так
C++
1
while(!(cin>>i) || cin.get() != '\n')
а не как сверху
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(!(cin>>i))
- попробуй ввести в верхнем кода 1а или 12blabla и увидишь что целое будет подхвачено хотя по хорошему ввод неверен
Миниатюры
Защита от дурака. Ввод данных типа int с клавиатуры.  
3
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.04.2012, 02:31
Лучший ответ Сообщение было отмечено как решение

Решение

Основная фишка - неверный ввод фиксируется вот так
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(cin>>i))
, для всевозможных дополнительных вариантов неверного ввода необходимо его оснастить ещё cin.get, т.е. идеальній или близкий к нему вариант фиксации вот этот
C++
1
if(!(cin>>i) || cin.get() != '\n')
. И ещё один момент, после кривого ввода обязательно вытерать буффер
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cin.sync();//Удалим данные из буффера
, а не только сбрасывать флаг ошибки
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cin.clear();
. Невытертый буффер будет продолжать коробить наш ввод. Вот теперь пожалуй и всё по данному топику
3
1 / 1 / 0
Регистрация: 12.04.2012
Сообщений: 20
14.04.2012, 02:34  [ТС]
Огромное вам спасибо !
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.04.2013, 17:57
"По просьбам трудящихся" ниже проект с безопасным вводом и меню на заданное кол-во цифровых значений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
 
int main()
{
    int iChoise= 0;//переменная отвечающая за ввод пользователя
    bool bWork = true;//флаг продолжения работы алгоритма
    while( bWork )
    {
        cout<<"\tMENU"<<endl;
        cout<<"1 - Item1"<<endl;
        cout<<"2 - Item2"<<endl;
        cout<<"0 - Exit"<<endl;
        cout<<"Your choise : ";
        if(!(cin>>iChoise) || cin.get() != '\n') 
        {
            cout<<"Incorrect input!"<<endl;
            cin.clear(); // сбрасывает все биты потока, тоесть поток становится "хорошим"
            cin.sync();//Удалим данные из буффера
        }
        else
        {
            switch(iChoise)
            {
            case 1:
                cout<<"Run Item1"<<endl;
                break;
            case 2:
                cout<<"Run Item2"<<endl;
                break;
            case 0:
                bWork = false;
                break;
            default:
                cout<<"Unsupperted choise"<<endl;
                break;
            }
        }
    }
    return 0;
}
Миниатюры
Защита от дурака. Ввод данных типа int с клавиатуры.  
1
p0iznp0izn
28.04.2013, 18:13
Трудящиеся говорят Спасибо!
0 / 0 / 1
Регистрация: 16.02.2014
Сообщений: 113
02.03.2014, 21:49
Обьясните, пожалуйста, эту строчку
C++
1
while(!(cin>>i) || cin.get() != '\n')
Добавлено через 6 минут
Пока переменная і не целая или введенный символ не Enter, то выполнить...
Так чтоле?
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
02.03.2014, 23:11
Цитата Сообщение от Donville Посмотреть сообщение
Обьясните, пожалуйста, эту строчку
C++
1
while(!(cin>>i) || cin.get() != '\n')
Условие !(cin>>i) || cin.get() != '\n' означает: либо ошибка ввода, либо в потоке ввода после чтения i остались ещё символы - не сразу конец строки.

Пример 1. Пользователь нажимает клавиши: qwer Enter ( Enter - то есть клавишу Enter )
В этом случае будет выполнено условие !(cin>>i), т.к. из строки "qwer" нельзя прочитать целое число - ошибка ввода.

Пример 2. Пользователь нажимает: 123RT и затем Enter
В этом случае ошибки ввода нет, значение i : 123. Однако в строке ввода ещё остались символы 'R' 'T' и '\n'. В этом случае cin.get() == 'R' ( и значит !='\n' ).

Пример 3. Пользователь вводит: 5111222333 Enter
Здесь ошибка ввода, если sizeof(i) == 4, ошибка диапазона.
2
0 / 0 / 1
Регистрация: 16.02.2014
Сообщений: 113
02.03.2014, 23:40
Спасибо большое!
0
 Аватар для Михаил140
7 / 2 / 0
Регистрация: 02.08.2018
Сообщений: 61
08.01.2020, 01:06
Здравствуйте!

На VS 2019 все перечисленные коды не работают: переходят в бесконечный цикл.
Что делать?

Добавлено через 1 час 50 минут
Уточняю, что происходит:
При вводе буквы в место числа, cin.fail() становиться равен единице. Но эта единица не хочет
сбрасываться командами clear и sync. А ещё компилятор пропускает поле ввода при cin.fail() = 1, что делает
отчаянную попытку, прописать ввод без команд очистки, ещё более четной !!!
0
Just Do It!
 Аватар для XLAT
4188 / 2643 / 654
Регистрация: 23.09.2014
Сообщений: 8,862
Записей в блоге: 3
08.01.2020, 01:47
Михаил140,

интересно, вот это будет у вас работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
///----------------------------------------------------------------------------|
/// Защита от дурака.
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
 
template<class T>
    T input_user(const char* promt)
    {   std::cout << promt;
        T my;
        while(!(std::cin>>my) || std::cin.get() != '\n')
        {   std::cout << "Incorrect input!\n\n";
            std::cout << promt << " ";
            std::cin.clear();
            std::cin.sync();
        }
        return my;
    }
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{   
    while(true)
    {   
        std::cout   << "int------------------------:\n";
        std::cout   << " = " << ( input_user<int>("   ") +
                                  input_user<int>(" + ") ) << "\n\n";
                         
        std::cout   << "float----------------------:\n";
        std::cout   << " = " << ( input_user<float>("   ") +
                                  input_user<float>(" + ") ) << "\n\n";
                         
        std::cout   << "string----------------------:\n";
        std::cout   << " = " << ( input_user<std::string>("   ") +
                                  input_user<std::string>(" + ") ) << "\n\n";
    }
}
?
0
 Аватар для Михаил140
7 / 2 / 0
Регистрация: 02.08.2018
Сообщений: 61
08.01.2020, 11:08
Увы, тоже не работает. Переходит в бесконечный цикл.
Зато нашёл ещё одну "улику": коды, с командой cin.get работают корректно, при вводе чисел с буквами (653оп), но приводе буквы или букв с числами (па23), код тут же ломается.
От кириллицы и латиницы это не зависит.
1
Just Do It!
 Аватар для XLAT
4188 / 2643 / 654
Регистрация: 23.09.2014
Сообщений: 8,862
Записей в блоге: 3
08.01.2020, 12:27
Цитата Сообщение от Михаил140 Посмотреть сообщение
тоже не работает
верно, не работает.

вот щас тестю вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
///----------------------------------------------------------------------------|
/// Защита от дурака.
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
 
template<class T>
T input_user(const char* promt)
{
    T a;
    std::cout << promt;
    std::cin  >> a;
 
    while (std::cin.fail () || std::cin.get() != '\n')
    {      std::cin.clear();
           std::cin.sync ();
           std::cout << "Error!\n\n" << promt;
           std::cin  >> a;
    }
    return a;
}
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{
    while (true)
    {
 
        std::cout << input_user<int>        ("int------------------------:\n")
                  << "\n\n";
 
        std::cout << input_user<float>      ("float----------------------:\n")
                  << "\n\n";
 
        std::cout << input_user<std::string>("string---------------------:\n")
                  << "\n\n";
    }
}
Вроде всё гуд.
Но нет гарантии, что может всплыть какое-нить г...люк
0
 Аватар для Михаил140
7 / 2 / 0
Регистрация: 02.08.2018
Сообщений: 61
08.01.2020, 14:06
XLAT, нет, не работает: int = p4 и всё, снова цикл
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
08.01.2020, 14:29
Михаил140, такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
///----------------------------------------------------------------------------|
/// Защита от дурака.
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
 
template<class T>
T input_user(const char* promt)
{
    T a;
    std::cout << promt;
 
    while (!(std::cin >> a))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Error!\n\n" << promt;
    }
    std::cin.ignore(1000, '\n');
    return a;
}
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{
    while (true)
    {
        std::cout << input_user<int>        ("int------------------------: ")
            << "\n\n";
 
        std::cout << input_user<float>      ("float----------------------: ")
            << "\n\n";
 
        std::cout << input_user<std::string>("string---------------------: ")
            << "\n\n";
    }
}
2
Just Do It!
 Аватар для XLAT
4188 / 2643 / 654
Регистрация: 23.09.2014
Сообщений: 8,862
Записей в блоге: 3
08.01.2020, 16:39
liv, тоже есть некорректности,
например: дурак может ввести 555nnn
но это полбеды, дальше если вы вводили с ошибкой, то потом код введёт себя не так,
как от него ожидаешь.

Михаил140,
ещё один вариант(ошибку int = p4 отрабатывает корректно) претендующий на универсальность,
тестил на VS2019 Version 16.4.2
но я плохой тестер, может вы чё-нить(глюки) тут найдете.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
///----------------------------------------------------------------------------|
/// Защита от дурака.
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
 
class cFool
{
public:
    cFool& operator >> (std::string& a) ///-------------------------std::string:
    {
        getline(std::cin, a);
        promt = "";
        return *this;
    }
 
    cFool& operator >> (unsigned char& a) ///---------------------unsigned char:
    {
        bool      is_error;
        unsigned  n;
        do
        {   std::cin  >> n;
 
                is_error = std::cin.fail() || std::cin.get() != '\n';
            if (is_error)
            {
                std::cout << "Error!\n\n" << promt;
                std::cin.clear();
                std::cin.ignore(9999, '\n');
                std::cin.sync();
            }
            else if(n > 255)
            {   is_error  = true;
                std::cout << "Error bound!\n\n" << promt;
            }
        } while (is_error);
 
        a = n;
        promt = "";
        return *this;
    }
 
    template<class T>
    cFool& operator >> (T& a) ///--------------------------------------template:
    {
        std::cin >> a;
 
        while (std::cin.fail() || std::cin.get() != '\n')
        {
            std::cin.clear();
            std::cin.ignore(9999, '\n');
            std::cin.sync();
            std::cout << "Error!\n\n" << promt;  std::cin >> a;
        }
        promt = "";
        return *this;
    }
 
    std::string promt;
    cFool& operator >>(const char* promt_) ///----------------------------promt
    {
        std::cout << promt_;
        promt = promt_;
        return *this;
    }
}cin_fool;
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{
    setlocale(0, "");
 
    int m;
    std::string ss;
 
    ///--------------------------------------------|
    /// Тест цепочки с приглашением.               |
    ///--------------------------------------------:
    cin_fool >> "Строка: " >> ss >> "Число : " >> m;
    std::cout << "validator: "
        << "ss = " << ss << ", "
        << "m  = " << m << "\n\n";
 
    ///--------------------------------------------|
    /// Зацикленный тест для разных типов.         |
    ///--------------------------------------------:
    while (true)
    {
        std::cout << "char-----------------------:\n";
        char c;        cin_fool >> "c = " >> c;
        std::cout << "validator: " << c << "\n\n";
 
        std::cout << "unsigned char-----0,...,255:\n";
        unsigned char u; cin_fool >> "u = " >> u;
        std::cout << "validator: '" << u << "'\n\n";
 
        std::cout << "int------------------------:\n";
        int n;         cin_fool >> "n = " >> n;
        std::cout << "validator: " << n << "\n\n";
 
        std::cout << "float----------------------:\n";
        float f;       cin_fool >> "f = " >> f;
        std::cout << "validator: " << f << "\n\n";
 
        std::cout << "std::string----------------:\n";
        std::string s; cin_fool >> "s = " >> s;
        std::cout << "validator: " << s << "\n\n";
    }
}
1
 Аватар для Михаил140
7 / 2 / 0
Регистрация: 02.08.2018
Сообщений: 61
08.01.2020, 17:00
liv, прикольно! На буквы и на буквы с числами реагирует корректно, а числа считывает, пока не обнаружит букву. Но это - то что нужно!
XLAT, тоже Спасибо!
1
Just Do It!
 Аватар для XLAT
4188 / 2643 / 654
Регистрация: 23.09.2014
Сообщений: 8,862
Записей в блоге: 3
08.01.2020, 17:14
Цитата Сообщение от Михаил140 Посмотреть сообщение
а числа считывает, пока не обнаружит букву
вот здесь это исправлено:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
///----------------------------------------------------------------------------|
/// Защита от дурака.
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
 
template<class T>
T input_user(const char* promt)
{
    T a; std::cout << promt; std::cin >> a;
 
    while (std::cin.fail() || std::cin.get() != '\n')
    {
        std::cin.clear();
        std::cin.ignore(9999, '\n');
        std::cin.sync();
        std::cout << "Error!\n\n" << promt; std::cin >> a;
    }
    return a;
}
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{
    while (true)
    {
 
        std::cout << input_user<int>("int------------------------:\n")
            << "\n\n";
 
        std::cout << input_user<float>("float----------------------:\n")
            << "\n\n";
 
        std::cout << input_user<std::string>("string---------------------:\n")
            << "\n\n";
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2020, 17:14
Помогаю со студенческими работами здесь

Ввод символа в переменную типа INT
Доброго времени суток. Подскажите самый эффективный способ борьбы с неверным вводом данных пользователем. А именно когда пользователя...

Как разрешить ввод только чисел типа int?
Доброго времени суток. Подскажите, пожалуйста, как разрешить ввод только чисел типа int. Преподаватель очень любит заваливать на этом,...

Защита от дурака
Как в этот код добавить защиту от ввода символов? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...

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

Защита от дурака
Помогите, пожалуйста. Программа должна печатать только цифры (а не буквы и прочие символы, знак минус может стоять в самом начале) и при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Как объединить 2 одинаковые БД Access с разными данными
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru