Turbo C ++ cin () не работает вместе с gets () - PullRequest
0 голосов
/ 20 октября 2018

Вот фрагмент кода, который я написал с использованием C ++ в Turbo C ++ IDE.Проблема, с которой я сталкиваюсь, заключается в том, что после использования get () cin не работает, поскольку пропускает входные данные. Может кто-нибудь, возможно, предоставит решение этой проблемы.Вот фрагмент кода: -

        #include<iostream.h>
        #include<conio.h>
        #include<stdio.h>   
        int Resc()
           {
              char fName[10],lName[10],addr[100],usr[70],pass[20];
              int   d,y,m;
              unsigned int phNo;
              char *Gend; 
             clrscr();
             cout<<"Enter First Name :"<<endl;
             gets(fName);
             cout<<"Enter Last Name :"<<endl;
             gets(lName);
             cout<<"Enter Gender :"<<endl;
             gets(Gend);
             cout<<"Enter Address:"<<endl;
             gets(addr);
             cout<<"Enter Date Of Birth (d/m/y):"<<endl;
             cin>>d>>m>>y;
             cout<<"Enter Phone Number :"<<endl;
             cin>>phNo;
             cout<<"Enter Username:"<<endl;
             gets(usr);
             cout<<"Enter Password:"<<endl;
             gets(pass);
             getch();
             return 0;
           }

Это было бы очень полезно.Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

По сути, gets() не является функцией C ++ (она существует потому, что вся библиотека C доступна для C ++)

Дело в том, что вы путаете использование буферизованного ввода (используя пакет stdio)) с буферизованной системой ввода C ++.И буферы сталкиваются друг с другом.

Не смешивайте буферизованные системы ввода-вывода stdio и c ++, так как у вас возникнут проблемы такого рода.То, что происходит внутри реализации Turbo C ++, далеко не в состоянии проверить, так как 1) вы не раскрыли, какую версию TC ++ вы используете, и 2) у меня нет такого компилятора под рукой для выполнения тестов.

0 голосов
/ 20 октября 2018

Turbo-C ++ является древним .Есть бесплатные компиляторы, которые намного лучше.Хотя я понимаю, что в некоторых странах, к сожалению, это все еще требуется педагогам.Однако, если есть какой-то способ, которым вы можете использовать альтернативу, вы должны.Код, который вы учитесь писать прямо сейчас, не будет компилироваться на компиляторах, фактически используемых в промышленности.Это создаст проблемы для вас на будущих работах.

gets - худшая функция из когда-либо превращенных в стандартную языковую библиотеку.Нельзя правильно использовать.Никогда не используйте это.Удалите его существование из своего разума.

Не смешивайте ввод-вывод C и C ++.Это приводит к сложным проблемам, когда они не синхронизированы.Используйте один или другой, исключительно.Если вы используете CI / O, используйте scanf и fgets с stdin, а не gets.Если вы используете C ++ I / O, используйте исключительно cin.Обратите внимание, что анализ даты "d / m / y" с cin немного сложен.С другой стороны, использование cin позволит вам использовать string вместо массивов символов, что будет бесконечно лучше.(Например, это может означать, что вы можете вводить имена длиннее 9 символов, не заставляя вашу программу делать странные вещи.)

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

Номера телефонов не являются целыми числами.Они часто начинаются с нулей, при обычном использовании содержат знаки препинания и пробелы и достаточно длинные, чтобы переполнять unsigned int.(В тот момент, когда вы используете префикс области или оператора, целочисленная интерпретация, вероятно, превышает 4000000000.) Всегда используйте строки для хранения телефонных номеров.

...