Форум программистов, компьютерный форум CyberForum.ru

Защита от дурака. Разбор кода - C++

Восстановить пароль Регистрация
 
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
17.02.2013, 11:16     Защита от дурака. Разбор кода #1
всем здравствуйте. Прошу помощи. такова ситуация, есть код защиты от ввода букв и отбрасывания пробелов, но не могу разобраться, он не мой.
помогите разобраться.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
float zashita()
{
 
    char si[1];
    char  s1[10]={""};
    int r2=0,r3=0;
    float kat1;
    A:
     r2=scanf_s(" %[^\n]", s1,10);    // неясно что тут. как работает сканф  %[^\n] - это вроде отбрасывание пробелов
     if (r2>=0)
    {
     r3=sscanf(s1,"%f%c",&kat1,si);    // и вот тут не ясно ничего.
     if(r3==0||r3>1)
     {
      printf("Недопустимы буквы.\n Попробуйте еще раз.\n\n\n");
      getch ();
      goto A;
     }
    }
     return kat1;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 11:16     Защита от дурака. Разбор кода
Посмотрите здесь:

Защита от дурака C++
C++ Защита от дурака
защита от дурака C++
Защита от дурака (пустое значение в названии) C++
C++ Защита от дурака
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.02.2013, 13:15     Защита от дурака. Разбор кода #2
Цитата Сообщение от phoenix12297 Посмотреть сообщение
sscanf(s1,"%f%c",&kat1,si); * *// и вот тут не ясно ничего.
Ну и что тут не ясно?
Цитата Сообщение от phoenix12297 Посмотреть сообщение
scanf_s(" %[^\n]", s1,10); * *// неясно что тут. как работает сканф *%[^\n] - это вроде отбрасывание пробелов
Сделана для этого, но работает не так http://www.cplusplus.com/reference/cstdio/scanf/ здесь почитайте


Да и Вы с разделом ошиблись все-таки.
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
17.02.2013, 15:39  [ТС]     Защита от дурака. Разбор кода #3
r2=scanf_s(" %[^\n]", s1,10); ну мне не ясно с какой целью приравнивается к г2. Я как бы понимаю что там логическая единица получается, но что она значит.

и тоже самое во втором. Еще не ясно что значит si вот тут -> "r3=sscanf(s1,"%f%c",&kat1,si);"
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.02.2013, 17:49     Защита от дурака. Разбор кода #4
phoenix12297, scanf возвращает число успешных присваиваний. Вы читали, что я кидал по ссылке???
Цитата Сообщение от phoenix12297 Посмотреть сообщение
if(r3==0||r3>1)
Так не пишут
Цитата Сообщение от phoenix12297 Посмотреть сообщение
if (r2>=0)
Так тоже не пишут
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
17.02.2013, 18:14  [ТС]     Защита от дурака. Разбор кода #5
да, читали. но сложновато все написано, еще и не на родном языке. а как тогда пишут, если не так? на данном этапе мне нужно чтоб работало, а оно работает, и разобраться. вот со вторым и проблема.
Согласен, написано некрасиво, но работает в это лезть пока не хочу.

получается в г2 там всегда 1 т.к. что-то принимает сканф, а в г3 0 в том случае если запись в переменную прошла с ошибкой и дальше через иф идет сообщение об ошибке. так?

тогда остается вопрос что значит si вот тут -> "r3=sscanf(s1,"%f%c",&kat1,si);"
Yandex
Объявления
17.02.2013, 18:14     Защита от дурака. Разбор кода
Ответ Создать тему
Опции темы

Текущее время: 11:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru