2016-04-27 6 views
-3

Это часть программы, которую я должен сделать в Turbo C++; Здесь, если я даю ввод id как «PLAYNOW» и передаю как «PASSWORD», переменная p сохраняет значение 0, но i не сохраняет. id переменной хранит некоторый номер нежелательной почты в конце PLAYNOW, и я не могу понять, почему. Пожалуйста помоги. Пожалуйста, проигнорируйте любые файлы заголовков, которые не добавлены, и способ ввода пароля. Спасибо!Программа на C++ для хранения идентификатора и пароля

#include<conio.h> 
#include<iostream.h> 
#include<string.h> 
#include<process.h> 

int main() 
{ 
    char id[7],pass[8]; 
    cout<<"Enter id: "; 
    cin.getline(id,7); 
    cout<<"Enter pass: "; 
    cin.getline(pass); 
    char idc={"PLAYNOW"}; 
    char passc={"PASSWORD"}; 
    int i=strcmp(id,idc); 
    int p=strcmp(pass,passc); 

    if(i==0&&p==o) 
     cout<<"Welcome. "; 
    else 
     exit(0); 
    getch(); 
    return 0; 
} 
+2

'char idc' Помните, что' char' - это единственный символ. Возможно, вы хотите 'const char *' или еще лучше использовать 'std :: string'. – drescherjm

+1

на самом деле трудно поверить, что этот код компилируется, strcmp не должен принимать символ в качестве аргумента – pm100

+1

*** Я должен сделать в Turbo C++ *** Убедитесь, что вы идете в программирование, которое вы посвящаете времени узнать о компиляторе 'C++'. Turbo C++ был хорошим 25 лет назад, но это было до стандартизации 'C++ '. С тех пор многое изменилось. – drescherjm

ответ

0

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

cin.getline(pass, 8);

Я бы серьезно рассмотреть вопрос об использовании компилятора, который немного новее, и больше внимания уделяется читаемости и конвенции, так как стало ясно, что есть более эффективные способы сделать то, что, в конечном счете делается здесь. Особенно с той строкой, которую я указал, это очень удобно. Что делать, если строка длиннее/короче 8 символов?

1

Если id и pass являются «PLAYNOW» и «PASSWORD», идентификатор имеет длину 8, а пропуск имеет длину 9 (символ NULL в конце строки).

Я изменил, как показано ниже, и результат печати в cmd приветствуется.

char id [8], pass [9];

...

cin.getline (идентификатор, 8);

char idc [] = "PLAYNOW";

char passc [] = "PASSWORD";

...

cin.getline (передача, 9);

...

, если (я == 0 & & р == 0)

2

Одна из проблем в коде OP является недостаточное количество памяти, выделенной для переменных. Например, с помощью этих линий:

char id[7]; 
cin.getline(id,7); 

Функции getline может считывать и сохранять от входного потока до символов в нуле массива символов id, но тогда программа должна сравнить эту строку до PLAYNOW, что составляет символы длинный.

Это приводит к следующей проблеме, когда getline оставляет непроницаемые символы в потоке, установлен битбит, предотвращая дальнейшие чтения.

Чтобы исправить их, даже со старым стандартом, OP может сделать что-то вроде этого:

const int ssize = 32;  // enough space to store id or password 
const int ssmax = 1024; 
// big value... ^^ try std::numeric_limits<std::streamsize>::max() instead 

char id[ssize], 
    pass[ssize]; 

cout << "Enter id: "; 
cin.getline(id, ssize);   // extract (ssize - 1) chars from input 
if ( cin.fail()) { 
    cin.clear();    // if user entered more then ssize chars 
    cin.ignore(ssmax, '\n'); // clear the stream 
} 

То же самое для pass (ОП не прошел 8 ко второму GetLine, тоже).

Тогда объявления строк, содержащие ожидаемый идентификатор и пароль, являются неправильными. Используйте те:

char idc[] = "PLAYNOW"; 
char passc[] = "PASSWORD"; 

Последние строки можно переписать также:

if (strcmp(id, idc) != 0 || strcmp(pass, passc) != 0) 
    exit(0); 

cout << "Welcome. "; 
cin.get(); 

return 0;  // end of main() 

Кстати, я совершенно уверен, что std::string s принадлежит C++ 98, так что это должно работать также:

#include <iostream> 
#include <string> 

int main() { 
    std::string id, pass;  
    std::cout << "Enter id: "; 
    std::getline(std::cin, id);   
    std::cout << "Enter pass: "; 
    std::getline(std::cin, pass);    

    std::string idc("PLAYNOW"); 
    std::string passc("PASSWORD"); 

    if (idc != id || passc != pass) 
     exit(0); 

    std::cout << "Welcome. "; 

    return 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^