#include
int main() {
int a, b, c;
char x;
printf ("ВВЕДИТЕ ПАРОЛЬ:") ;
scanf("%s", &x);
if ("%s == пароль", x)
printf("РАЗРЕШЕНО");
else
printf("ЗАПРЕЩЕНО") ;
return 0;
}
НЕ ОБРАЩАЙТЕ ВНИМАНИЕ НА ДРУГИЕ ПЕРЕМЕННЫЕ.
При неправильном пароле он тоже вводит РАЗРЕШЕНО.
Другие языки программирования и технологии
В чём ошибка? СИ
Во первых у тебя объявлена переменная x типа char который может хранить ток один символ.
В Си строкового типа не существует, и чтобы сохранить строку необходимо создать символьный массив типа char, например char x[101] создаёт символьный массив с возможностью сохранения до 100 символов, любая строка в си в конце имеет NULL-символ указывающий на конец строки, выглядит он вот так '\0' явно указывать его не нужно, компилятор сам всё сделает, это нужно знать для того чтобы при создании символьного массива, учесть размер и для этого символа.
Во вторых ты неправильно прописал условие.
if ("%s == пароль", x)
Си просто так не даст сравнить две разные строки, при попытки сравнить строки вот так if (s1 == s2) он на самом деле сравнивает не строки, а их адреса в памяти компьютера, а именно адрес первого символа первой строки, адрес первого символа первой строки может быть таковым 0x689ADF а у второй строки 0x789DF в итоге получается вот такое сравнение 0x689ADF == 0x789DF в итоге они не равны даже если обе переменные будут иметь одно и тоже значение.
Для сравнение строк есть функция strcmp для этого нужно подключить библиотеку string.h для подробной информации есть документация cppstudio.com/post/707/
В Си строкового типа не существует, и чтобы сохранить строку необходимо создать символьный массив типа char, например char x[101] создаёт символьный массив с возможностью сохранения до 100 символов, любая строка в си в конце имеет NULL-символ указывающий на конец строки, выглядит он вот так '\0' явно указывать его не нужно, компилятор сам всё сделает, это нужно знать для того чтобы при создании символьного массива, учесть размер и для этого символа.
Во вторых ты неправильно прописал условие.
if ("%s == пароль", x)
Си просто так не даст сравнить две разные строки, при попытки сравнить строки вот так if (s1 == s2) он на самом деле сравнивает не строки, а их адреса в памяти компьютера, а именно адрес первого символа первой строки, адрес первого символа первой строки может быть таковым 0x689ADF а у второй строки 0x789DF в итоге получается вот такое сравнение 0x689ADF == 0x789DF в итоге они не равны даже если обе переменные будут иметь одно и тоже значение.
Для сравнение строк есть функция strcmp для этого нужно подключить библиотеку string.h для подробной информации есть документация cppstudio.com/post/707/
Вот эта конструкция делает что угодно, но не то, что ты подумал:
if ("%s == пароль", x)
if ("%s == пароль", x)
Владимир Шол
А как сделать так что я подумал??
Похожие вопросы
- Помогите найти ошибку Си
- Поможете найти и исправить тут ошибку. (СИ программирование)
- В чём ошибка? СИ.
- Помогите исправить ошибку в программе на Си
- помогите найти ошибку в коде на Си
- Язык Си|Будет ли ошибкой, если я буду увеличивать размер массива по мере ввода в него?
- Ошибка В программе СИ
- Исправте ошибки в задаче на языке Си
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Разница между Си и Си++
char x;
scanf("%s", x) ;
printf("%s", &x);