Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107

Кто отвечает за корректность аргументов функции?

22.07.2019, 19:23. Показов 6071. Ответов 72

Студворк — интернет-сервис помощи студентам
Вопрос к знатокам стандарта или просто ведующим.

В языке c за корректность аргументов обычно отвечает вызывающая сторона.

Т.е. если ты вызываешь printf("%d", some_int) и подставляешь туда нечто не int,
то это твои проблемы потом удивляться, недоумевать или возмущаться на некорректный вывод или уход в даун.

А с++ какая практика?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2019, 19:23
Ответы с готовыми решениями:

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)?
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово:) Конкретно. Есть функция void jacobi (...

Странное расположение в памяти аргументов функции с неизвестным количество аргументов
Не могу понять, почему такая программа не работает, выдавая segmentation fault после распечатки первой строки: void makeArr(char *str,...

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

72
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.07.2019, 14:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
а если был бы психологом, тогда бы знал,
что когда человек отрицает очевидную реальность
(тебе уже даже скриншоп показали в #52),
Похоже вы и Ева - близнецы. Только скомпелируйте в релиз будьте добры и повторите попытку. Знаток вы наш ассертный.
Цитата Сообщение от hoggy Посмотреть сообщение
то это - шиза
И это заметно. Ни чем не помогу.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
но я не психолог, и думаю, что это просто банальная тупость.
А вот оценивать интеллект не выгодно для вас. Я воздержусь вам ответить. У каждого свой лоб и свой рот. Поэтому сказано:
На чужой лобок не открывай роток
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.07.2019, 14:21
Цитата Сообщение от hoggy Посмотреть сообщение
ты методы не перепутал?
то, что ты сейчас показал - это метод find
Не перепутал. Абсолютно реальная задача: на вход получаем код UTF-32 символа, на выходе нужно вернуть его свойства.
Решения на основе find - долго. Логарифмическая сложность, а символов определенных стандартом юникода уже миллион.
Решение по табличке - а что делать, если мы вылетели за табличку, ругать пользователя "нельзя нестандартные символы вводить"? Так они у него из файла сыпятся, откуда ему знать стандартные они или нет.

В результате результат возвращается оператором индексирования, потому что быстро. Но вокруг него делается костылик
C++
1
return charCode<maxCode?table[charCode]:defaultValue;
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2019, 15:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
Только скомпелируйте в релиз будьте добры
нахера?

ты открой букварь уже, и почитай зачем нужны ассерты,
тогда может вразумеешь,
почему они не нужны в релизе.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.07.2019, 15:38
Цитата Сообщение от hoggy Посмотреть сообщение
ты открой букварь уже, и почитай зачем нужны ассерты,
тогда может вразумеешь,
почему они не нужны в релизе.
Хватит меня учить. Разговор окончен. Ввиду бесполезности.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2019, 15:52
Цитата Сообщение от Renji Посмотреть сообщение
Решения на основе find - долго.
не вразумел.

приведи нормальный пример.

и когда я пишу: "нормальный пример",
то имею ввиду описание задачи,
и решение в виде компилябельного кода.

сейчас не очевидно:
1.
с фига ли find будет дольше?

заметь: find(key)
сделаю ещё понятнее: find(index)
а не: find(value)


мы же обсуждаем валидность ключа
(индекса, если речь идет о массивах)

какие проблемы?


2.
если юзверю доступен индексированный доступ,
стало быть есть оператор size().
им пользоваться религия не позволяет?

я не улавливаю проблемы.

вот эту строчка:
Цитата Сообщение от Renji Посмотреть сообщение
return charCode<maxCode?table[charCode]:defaultValue;
ты это в метод at предлагаешь запихать,
или к чему ты её вообще сейчас привел?

Добавлено через 6 минут
Цитата Сообщение от Renji Посмотреть сообщение
Решение по табличке - а что делать, если мы вылетели за табличку, ругать пользователя "нельзя нестандартные символы вводить"?
конечно ругать.
только не пользователя,
а программиста.

если есть табличка,
значит есть и диапазон допустимых для этой таблички значений.

и если индекс вылез за пределы этого диапазона,
значит баг.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.07.2019, 16:26
Цитата Сообщение от hoggy Посмотреть сообщение
не вразумел.
Мы о названии метода или о его реализации?
std::map::find - бинарный поиск в коллекции пар ключ:значение.
std::set::find - бинарный поиск в коллекции ключей.
std::find - линейный поиск в коллекции ключей.
Отсюда, когда мне предлагают сделать find, я думаю что речь идет о "запили коллекцию пар ключ:значение и ищи в ней".
Цитата Сообщение от hoggy Посмотреть сообщение
и когда я пишу: "нормальный пример",
то имею ввиду описание задачи,
и решение в виде компилябельного кода.
Задача - сказать является ли символ цифрой или нет. Нет, по стандарту юникода '0'<=charCode && charCode<='9' не достаточно.
Есть класс представляющий самой таблицу "код символа: битовая маска со свойствами символа".
Размеры таблицы меняются с каждым новым релизом стандарта. Сегодня символа в стандарте нет, завтра есть. Вы предлагаете пользователю парить себе мозг подобными техническими деталями? Нет символа - пусть табличка вернет нулевую маску и все. Для проверки "это цифра или не цифра?" этого вполне достаточно.
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
//В реальности масок будет несколько десятков
constexpr auto digitMask=1;
constexpr auto alphaMask=2;
//в реальности здесь будет число в районе миллиона
constexpr auto maxUnicodeCode=123;
 
class UncicodeTable
{
public:
    unsigned operator[](unsigned long charCode)const noexcept{
        return charCode<maxUnicodeCode?table[charCode]:0;
    }
private:
    static const unsigned table[maxUnicodeCode];
};
 
const unsigned UncicodeTable::table[maxUnicodeCode]={
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    digitMask, digitMask, digitMask, digitMask, digitMask, digitMask, digitMask, digitMask,
    digitMask, digitMask, 0, 0, 0, 0, 0, 0,
    0, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, 0, 0, 0, 0, 0,
    0, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask};
 
const UncicodeTable unicodeTable;
int main()
{
    wchar_t charCode;
    std::wcin>>charCode;
    if(unicodeTable[(unsigned long)charCode]&digitMask)
        std::wcout<<"Digit!"<<std::endl;
    return 0;
}
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.07.2019, 12:40
Цитата Сообщение от Renji Посмотреть сообщение
Мы о названии метода или о его реализации?
мы о самом методе.
название метода определяет смысл его реализации.

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

как именно работает find - не сильно принципиально.

Цитата Сообщение от Renji Посмотреть сообщение
Отсюда, когда мне предлагают сделать find, я думаю что речь идет о "запили коллекцию пар ключ:значение и ищи в ней".
даже невзирая на то,
что в контексте обсуждения речь идет об индексированных контейнерах,
а не об ассоциативных массивах?

я задал тебе вопрос:

Цитата Сообщение от hoggy Посмотреть сообщение
ты методы не перепутал?
то, что ты сейчас показал - это метод find
C++
1
2
if(array.find(ID) == array.cend())
    std::cout<<"Нет у нас такого айдишника"<<std::endl;
ты перепутал.
потому что в представленном выше фрагменте кода требуется (должен использоваться) именно find.
потому что выполняется поиск пассажира в автобусе.
и допускается мысль,
что он уже сошел на предыдущей остановке.
или может зайти только на следующей.

Цитата Сообщение от Renji Посмотреть сообщение
Вы предлагаете пользователю парить себе мозг подобными техническими деталями?
не пользователю.
а программисту-пользователю.

программист, в отличие от пользователя-не-программиста,
не имеет права быть идиотом.
а значит должен понимать, что делает.
а значит должен знать свою предметную область.
а значит должен знать её ограничения.

а ты что же, предлагаешь пользоваться таблицей,
игнорируя её ограничения? o_O
ты что, пишешь код по принципу: а вдруг повезет?

Цитата Сообщение от Renji Посмотреть сообщение
Нет символа - пусть табличка вернет нулевую маску и все. Для проверки "это цифра или не цифра?" этого вполне достаточно.
это - логично, и разумно.
для метода isDigit,
который определяет: цифра это или нет.
ведь если код символа за пределами диапазона таблицы,
тогда это однозначно не цифра,
потому что все цифры указаны в таблице,
а значит их коды находятся в её пределах.


но такой подход не логичен и не разумен operator[],
который возвращает значение реального элемента из реальной таблицы.


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
#include <iostream>
#include <cassert>
 
//В реальности масок будет несколько десятков
constexpr auto digitMask=1;
constexpr auto alphaMask=2;
//в реальности здесь будет число в районе миллиона
constexpr auto maxUnicodeCode = 123;
 
class UncicodeTable
{
public:
    bool isDigit(const unsigned long charCode) const noexcept 
    {
        const auto element
            = charCode < maxUnicodeCode? table[charCode] : 0;
        
        return digitMask & element;
    }
    unsigned operator[](const unsigned long charCode) const noexcept 
    {
        assert(charCode < maxUnicodeCode);
        return table[charCode];
    }
    
    constexpr unsigned size() const noexcept 
    {
        return maxUnicodeCode;
    }
    
private:
    static const unsigned table[maxUnicodeCode];
};
 
const unsigned UncicodeTable::table[maxUnicodeCode] = {
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    digitMask, digitMask, digitMask, digitMask, digitMask, digitMask, digitMask, digitMask,
    digitMask, digitMask, 0, 0, 0, 0, 0, 0,
    0, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, 0, 0, 0, 0, 0,
    0, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask, alphaMask,
    alphaMask, alphaMask, alphaMask
};
 
const UncicodeTable unicodeTable;
int main()
{
    /*
    wchar_t charCode = 0;
    
    assert(std::wcin);
    std::wcin >> charCode;
    assert(std::wcin);
    
    
    const unsigned code = static_cast<unsigned>(charCode);
    */
    
    const unsigned code = 125;
    
    if(unicodeTable.isDigit(code))
        std::wcout<< L"Code = " << code << L": is digit\n";
    else
        std::wcout<< L"Code = " << code << L": is not digit\n";
    
    if( code >= unicodeTable.size())    
        std::wcout<< L"Code = " << code << L" not support\n";
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.07.2019, 14:37
Цитата Сообщение от hoggy Посмотреть сообщение
даже невзирая на то,
что в контексте обсуждения речь идет об индексированных контейнерах,
а не об ассоциативных массивах?
Речь идет о частном случае разреженного массива. Ассоциативный массив - один из стандартных способов реализации разреженного. И да, ассоциативные массивы тоже работают через [].
Цитата Сообщение от hoggy Посмотреть сообщение
программист, в отличие от пользователя-не-программиста,
не имеет права быть идиотом.
а значит должен понимать, что делает.
У программиста обсуждаемая табличка была обычным сишным массивом еще со времен восьмибитовых кодировок и до UTF-16 включительно. И от того что реализация таблички немного поменялась, код ее использующий не изменился ни в одной буковке. Поэтому, вероятно, программист все же понимает что он делает.

Плюс, не забываем о принципе KISS.
1) Хочешь узнать является ли символ цифрой? unicodeTable[code]&digitMask.
2) Хочешь узнать принадлежит символ произвольному набору символов? unicodeTable[code]&customCharsetMask.
3) Хочешь узнать валиден ли символ? unicodeTable[code].
Все делается через один стандартный интерфейс. А если как предлагаете вы, придется три разных метода пилить. Без каких либо намеков на универсальное решение.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.07.2019, 18:22
Цитата Сообщение от Renji Посмотреть сообщение
Речь идет о частном случае разреженного массива.
мне одному показалось, что здесь:
Цитата Сообщение от Renji Посмотреть сообщение
2) При выходе за границы массива, возвращать значение по умолчанию. Нужна ссылка? Окей, пусть возвращает ссылку на static объект.
изначально шла речь о std::vector::at() ?

а началась эта речь с моего заявления,
что at - бесполезный метод.

Цитата Сообщение от Renji Посмотреть сообщение
Ассоциативный массив - один из стандартных способов реализации разреженного. И да, ассоциативные массивы тоже работают через [].
да и причем тут ассоциативные?
речь же не о них.

Цитата Сообщение от Renji Посмотреть сообщение
У программиста обсуждаемая табличка была обычным сишным массивом еще со времен восьмибитовых кодировок и до UTF-16 включительно. И от того что реализация таблички немного поменялась, код ее использующий не изменился ни в одной буковке. Поэтому, вероятно, программист все же понимает что он делает.
тут одно из трех:
либо изначально, по смыслу задачи, устраивает вариант:
"если у нас нет данных по конкретному символу, то будем врать, отвечая 'нет' на все вопросы".

либо программист исправлял баги,
внося правки в содержимое таблицы.

либо проблем не было просто потому,
что никто не запрашивал экзотику.

потому что вот здесь баг:
Цитата Сообщение от Renji Посмотреть сообщение
2) Хочешь узнать принадлежит символ произвольному набору символов? unicodeTable[code]&customCharsetMask.
потому что если индекс за пределами диапазона,
результат всегда будет отрицательный,
что не всегда является правдой.
а значит, иногда является багом.

потому что азиатский символ не перестанет быть азиатским только потому,
что в конкретной таблице о нем нет данных.

вот это - баг:
C++
1
2
if(unicodeTable[code] & asian_symbol)
     std::cout << "asian symbol\n";
а вот это - правильный код:
C++
1
2
3
4
5
6
7
8
9
if(code < maxUnicodeCode)
{
     if(unicodeTable[code] & asian_symbol)
         std::cout << "asian symbol: yes\n";
     else
         std::cout << "asian symbol: no\n";
}
else
    std::cout << "no data\n";
Цитата Сообщение от Renji Посмотреть сообщение
А если как предлагаете вы, придется три разных метода пилить. Без каких либо намеков на универсальное решение.
можно и не пилить.
если так нравится анализировать флаги - почему бы и нет?
вот только нет никакого смысла даже пытаться что-то там анализировать,
если заранее известно, что такого символа нет в данной таблице.

и раз уже оно всегда известно заранее,
то получается, что твой unicodeTable[code] совершенно напрасно
проверяет индекс в релизе при каждом обращении.

грамотный программист напишет так:

C++
1
2
3
4
5
6
7
8
9
10
11
// --- если символ не поддерживается таблицей,
// --- то нет смысла вообще начинать анализ.
if(unicodeTable.support(code))
{ 
    // --- раз мы здесь,
    // --- значит символ гарантированно поддерживается таблицей
    // --- значит нет никакого смысла каждый раз заново
    // --- проверять индекс внутри operator[]
    const auto element = unicodeTable[code]; 
    // ....
}
для неграмотных человечество изобрело assert
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.07.2019, 18:55
Цитата Сообщение от hoggy Посмотреть сообщение
изначально шла речь о std::vector::at() ?
Ну так при добавлении значения по умолчанию он и превращается в частный случай разреженного массива.
Цитата Сообщение от hoggy Посмотреть сообщение
либо программист исправлял баги,
внося правки в содержимое таблицы.
Это не баги, это обновление стандарта. Правки вносит unicode.org, публикующий обновленный UnicodeData.txt. Если в UnicodeData.txt не указано что символ обладает свойством X, значит символ не обладает таким свойством. Если символа в UnicodeData.txt вообще нет, значит и свойств у него никаких нет. Номер поддерживаемого программой стандарта юникода честно выносится в документацию.
Цитата Сообщение от hoggy Посмотреть сообщение
грамотный программист напишет так:
И допишет ветку else кидающую исключение. И окажется что программа теперь гвоздями прибита к unicode 11.0.0, а на символах из unicode 12.0.0 падает. Что далеко не всегда будет приемлемым решением.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2019, 12:04
Цитата Сообщение от Renji Посмотреть сообщение
Ну так при добавлении значения по умолчанию он и превращается в частный случай разреженного массива.
твой случай - совсем частный.
назвывается: "маскировка бага"

Цитата Сообщение от Renji Посмотреть сообщение
Это не баги, это обновление стандарта. Правки вносит unicode.org,
в твоём личном коде тоже правки вносит unicode.org?
потому что если нет,
значит твоя таблица - твоя.
и не имеет никакого отношения к их таблице.

Цитата Сообщение от Renji Посмотреть сообщение
Если в UnicodeData.txt не указано что символ обладает свойством X, значит символ не обладает таким свойством.
что, только я один понимаю,
что азиатский символ азиатским быть не перестает независимо ни от каких таблиц?

и что есть принципиальная разница между:
"у нас нет данных" и "символ действительно не азиатский" ?

Цитата Сообщение от Renji Посмотреть сообщение
И окажется что программа теперь гвоздями прибита к unicode 11.0.0, а на символах из unicode 12.0.0 падает.
программа в любом случае прибита гвоздями к таблице.
если таблица поддерживает 11.0.0, значит с 11.0.0 проблем не будет.
если таблица поддерживает 12.0.0, значит с 12.0.0 проблем не будет.

если таблица поддерживает XX.0.0, значит... ну ты понэл.

вопрос лишь в том, а знаешь ли ты (программист-пользователь),
каковы ограничения твоей таблицы?

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

C++
1
2
3
4
5
6
7
8
9
10
11
// юзерский код
if(!unicodeTable.support(code))
    notice("code %zu не найден. примите меры, господа!", code);
 
code = default_code;
 
... // bla bla bla
// вот здесь code должен быть валидным
// а если кто подзабыл, assert напомнит
const auto low = unicodeTable.lower_case(code);
...
ты же предлагаешь замаскировать баг.
в твоем варианте,
класс таблицы в тихую подсунет дефолтный символ,
и внешний код даже знать не будет,
что у него проблема.

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

по степени долбанутости,
такая твоя логика напоминает мне политику российского государства.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
26.07.2019, 14:31
Цитата Сообщение от hoggy Посмотреть сообщение
что, только я один понимаю,
что азиатский символ азиатским быть не перестает независимо ни от каких таблиц?
"Символы" в глифах. А в char32_t код символа 1234, который без таблички является не более чем бессмысленным набором цифр. Вот будет официальный документ (стандарт) в котором написано что 1234 это азиатский символ, тогда будет о чем говорить.
Цитата Сообщение от hoggy Посмотреть сообщение
// вот здесь code должен быть валидным
Не должен. Lower case, upper case, title case считаются согласно все тому же UnicodeData.txt (три последних колонки). Если в соответствующей колонке таблицы пусто, значит нет такого преобразования. Если записи о символе вообще нет, значит нет такого преобразования. Возвращаем код символа неизменным и не разводим самодеятельность.

Тут будет другая проблема:
C++
1
2
if(!unicodeTable.isAlpha(code))
    notice("Японским языком сказано, только алфавитные символы вводить!");
Но тут как раз посыпятся жалобы в техподдержку, что мол, обновите табличку то, а то она древние иероглифы не пускает.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.07.2019, 14:49
Цитата Сообщение от Renji Посмотреть сообщение
Тут будет другая проблема:
у нормальных людей такой проблемы быть не может.
потому что результат у нормальных людей:
"сорри, но ваш символ не поддерживается нашей системой".

нормальные люди просто допилят локаль.

у ненормальных тут тем более нет никаких проблем.
по логике ненормальных:

Цитата Сообщение от Renji Посмотреть сообщение
Если записи о символе вообще нет, значит нет такого
значит пошли все в жопу.

вот когда будет:
Цитата Сообщение от Renji Посмотреть сообщение
официальный документ (стандарт) в котором написано что 1234 это азиатский символ, тогда будет о чем говорить.
а покамест, с точки зрения ненормальных людей,
бедные японцы такие тупые,
что даже символ своего алфавита ввести без ошибки не умеют.

C++
1
2
3
4
5
if(!unicodeTable.isAlpha(code))
    notice("Японским языком сказано, только алфавитные символы вводить!");
 
    // TODO: и пофигу, что налажали местные умельцы,
    // а не японские юзвери
в общем я понял твою точку зрения:
говнокод, который маскирует баги,
а вину за них сваливает на японцев.

дальше как бе уже не так интересно продолжать этот диалог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2019, 14:49
Помогаю со студенческими работами здесь

Кто отвечает на форумах?
Мне стало интересно кто отвечает на форумах? Этим людям заняться нечем чтоли, чтобы искать чьи то вопросы, вникать в них и потом писать...

Чат не отвечает, пока кто-либо не подключится
Всех приветствую. Столкнулся со следующей проблемой при написании простого чата по TCP/IP: после нажатия на кнопку &quot;Start Server&quot;...

Можно ли наращивать количество аргументов функции? Можно ли вернуть количество аргументов функции?
К примеру есть примитивная запись int Funk(bool Er,int q1,int q2,int q3) {return 0;} В данной записи объявлены аргументы int...

Корректность функции
Мне нужно чтобы не в процедуре проверялся ввод данных а в функции, как это сделать ? procedure input(var a:real;var b:real; var c:real); ...

Вычислить значение функции и вывести на печать значения функции и аргументов
Уважаемые программисты, Я новенький на вашем форуме, так что извините, если что не так. Помогите с таким заданием : Вычислить...


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

Или воспользуйтесь поиском по форуму:
73
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД 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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru