Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Несколько вопросов по C++

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Начало)
snikers987
Отправлено: 01 Февраля, 2012 - 22:29:04
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




CODE (text):
скопировать код в буфер обмена
  1.  
  2. #include <iostream.h>
  3. int main(){
  4.     char authpass[7] = "qwerty";
  5.     cout << "Hello, snikers987!\r\n";
  6.     cout << "This is your first programm on C++!\r\n";
  7.     char letter;
  8.     cout  <<  "Do you want begin? (y/n): ";
  9.     cin >> letter;
  10.     if(letter == 'y'){
  11.         char username[10];
  12.         cout << "Enter user name: ";
  13.         cin >> username;
  14.         cout << "User:" << username << "\r\n";
  15.         char pass[10];
  16.         cout << "Enter your password: ";
  17.         cin >> pass;
  18.         //cout << strlen(pass);
  19.        // if(strcmp(pass,authpass) > 0){
  20.         if(pass == authpass){
  21.             cout << "You have successfully authenticates!";
  22.         }else{
  23.             cout << "You have error!";
  24.         }
  25.     }else{
  26.         cout << "bay"<< endl;
  27.     }
  28. }
  29.  


Как вообще сравнить 2 строки?
strcmp() - компилятор говорит 'strcmp' was not declared in this scope
Если сравнивать строки == , то в любом случаи получаю You have error!

(Отредактировано автором: 01 Февраля, 2012 - 22:30:50)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
caballero
Отправлено: 01 Февраля, 2012 - 22:35:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
strcmp() - компилятор говорит 'strcmp' was not declared in this scope

инклуда соответствующего нет

Цитата:
Если сравнивать строки == , то в любом случаи получаю You have error!

в си так сравнивать нельзя

а вообще принятио использовать char* для строк вместо массивов


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 22:42:11
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




caballero пишет:
Цитата:
strcmp() - компилятор говорит 'strcmp' was not declared in this scope

инклуда соответствующего нет

Цитата:
Если сравнивать строки == , то в любом случаи получаю You have error!

в си так сравнивать нельзя

а вообще принятио использовать char* для строк вместо массивов


Ясно, а как определить что нужно инклудить?
char* variable; ?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever
Отправлено: 01 Февраля, 2012 - 22:45:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




caballero пишет:
а вообще принятио использовать char* для строк вместо массивов

char* и char[] это одно и тоже Подмигивание
snikers987 пишет:
strcmp() - компилятор говорит 'strcmp' was not declared in this scope

string.h нужно подключить.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 22:54:05
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Только про char* не совсем понял, если так указать то получаю ошибку о том что память не может быть 'writen'..

А со сравнением строк вышло.

А скомпилированная версия работает не так как ожидалось. Растерялся

(Отредактировано автором: 01 Февраля, 2012 - 22:58:46)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever
Отправлено: 01 Февраля, 2012 - 22:58:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




snikers987 пишет:
если так указатьТак это как?

так это как?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 23:00:07
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




OrmaJever пишет:
snikers987 пишет:
если так указатьТак это как?

так это как?


char* pass; ?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever
Отправлено: 01 Февраля, 2012 - 23:03:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




snikers987 пишет:
char* pass; ?

Обьявлен указатель, но он не на что не указывает поэтому записывать некуда.
А когда обьвляешь char pass[10] то обьявляется масив размером 10 char'ов, в которые можно затем что-то записать.
(Добавление)
OrmaJever пишет:
char* и char[] это одно и тоже

этоя написал к тому что между
CODE (htmlphp):
скопировать код в буфер обмена
  1. char *str = "str";
  2. // или
  3. char str1[] = "str";

нету разницы.

(Отредактировано автором: 01 Февраля, 2012 - 23:05:52)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 23:14:00
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Тоесть для того чтобы иметь возможность писать нужно при инициализации таки указывать
char pass[10]; , тоесть выделить память?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever
Отправлено: 01 Февраля, 2012 - 23:17:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




да. Можно ещё динамически выделить память, но в даной ситуации это не нужно.
PHP:
скопировать код в буфер обмена
  1. char *str = new char[10];
  2. // делаем что-то сострокой.
  3.  
  4. //обязательно когда указательно больше не нужен, нужно освободить память.
  5. delete[] str;

(Добавление)
Си это не php, и чем раньше ты это поёмешь тем легче будет учить. Я когда начинал читать книги по Си я понял что на php может написать даже обезьяна (не хочу не кого обидеть). В Си нужно за всем следить, не хватит одного байта для записи и программа вылетит без обьяснений, забыл удалить указатель на динамически выделеную память, она закончится и программа тоже вылетит. Здесь нужно быть очень внимательным.

(Отредактировано автором: 01 Февраля, 2012 - 23:24:43)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 23:34:47
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Ну то что Cи язык строгой типизации это я уяснил, но после php весьма сложно ко всему привыкнуть, наоборот было бы на много легче..
Буду читать, ну и тут спрашивать если что. Улыбка

А почему скомпилированная программа (из первого поста) весит почти 4 метра и требует еще несколько dll-ок?
И в qt программа работает, а после компиляции после ввода пароля просто вылетает?

(Отредактировано автором: 01 Февраля, 2012 - 23:40:23)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever
Отправлено: 01 Февраля, 2012 - 23:48:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




snikers987 пишет:
наоборот было бы на много легче..

наоборот учить было бы нечего, в php почти весь синтаксис взят из Си, да я даже больше скажу, он написан на Си.
snikers987 пишет:
А почему скомпилированная программа (из первого поста) весит почти 4 метра и требует еще несколько dll-ок?

Ну смотря какие либы она требует. Ну если там только один инклуд iostream то должна весить ~400 кб, а откуда 4мб я незнаю, может компилятор что-то своё добавил.
snikers987 пишет:
а после компиляции после ввода пароля просто вылетает?

Ну вот это про то что я говорил в преведущем посте.
1) пароль должен быть не больше 9 символов
2) Эту строку
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(pass == authpass){

надеюсь заменил на


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 23:56:50
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




OrmaJever пишет:
Эту строку

Конечно, заменил.

Более того, если в первом действии ввести ввести n (не y), происходит аналогичная ситуация..

CODE (text):
скопировать код в буфер обмена
  1.  
  2. #include <iostream.h>
  3. #include <string.h>
  4. int main(){
  5.     char* authpass = "qwerty";
  6.     //cout << authpass;
  7.     cout << "Hello, snikers987!\r\n";
  8.     cout << "This is your first programm on C++!\r\n";
  9.     char letter;
  10.     cout  <<  "Do you want begin? (y/n): ";
  11.     cin >> letter;
  12.     if(letter == 'y'){
  13.         char username[10];
  14.         cout << "Enter user name: ";
  15.         cin >> username;
  16.         cout << "User:" << username << "\r\n";
  17.         char *pass = new char[20];
  18.         cout << "Enter your password: ";
  19.         cin >> pass;
  20.        // cout << pass;
  21.         if(strcmp(pass, authpass) || strcmp(username, "snikers")){
  22.        // if(true){
  23.             cout << "You have error!";
  24.         }else{
  25.             cout << "You have successfully authenticates!";
  26.         }
  27.     }else{
  28.         cout << "bay";
  29.     }
  30. }
  31.  
  32.  

(Отредактировано автором: 02 Февраля, 2012 - 00:00:03)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
caballero
Отправлено: 02 Февраля, 2012 - 00:01:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
char* и char[] это одно и тоже


только содержимое можеть быть разным если не обнулить массив перед записью строки


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
OrmaJever
Отправлено: 02 Февраля, 2012 - 00:13:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




snikers987, могу предположиь что cin записывает и нулевой символ в конец строки (тоесть y и \0), а в один байт 2 символа не влезут. Вобщем нужно letter определить как
CODE (htmlphp):
скопировать код в буфер обмена
  1. char letter[2];
  2. //и сравнивать
  3. *letter == 'y'


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на C++ »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB