Turbo C++ cin() 不能与 gets() 一起使用

Turbo C++ cin() not working along with gets()

本文关键字:一起 gets 不能 C++ cin Turbo      更新时间:2023-10-16

这是我在 turbo C++ IDE 中使用 c++ 编写的代码片段。我面临的问题是在使用 gets(( 后,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;
}

这将是一个很大的帮助。谢谢。

涡轮增压C++是古老的。有免费的编译器可用,要好得多。虽然我意识到在某些国家,不幸的是,教育工作者仍然需要它。但是,如果有任何方法可以使用替代方案,则应使用。您现在正在学习编写的代码不会在行业中实际使用的编译器上进行编译。这会给你未来的工作带来问题。

gets是有史以来使其成为语言标准库的最糟糕的功能。不可能正确使用。永远不要使用它。从你的脑海中剔除它的存在。

不要混合使用 C 和 C++ I/O。这会导致不同步的棘手问题。只使用其中一种。如果使用 C I/O,请将scanffgetsstdin一起使用,而不是gets。如果使用C++ I/O,请以独占方式使用cin。请注意,使用cin解析"d/m/y"日期有点棘手。另一方面,使用cin将允许您使用string而不是字符数组,这将是无限优越的。(例如,这意味着您可以输入超过 9 个字符的名称,而不会让您的程序做奇怪的事情。

Gend可能应该是一个单一的char,而不是指向任何事物的指针。程序的这一部分是错误的,极有可能行为不端或崩溃。

电话号码不是整数。它们通常以零开头,在典型用法中包含标点符号和空格,并且足够长以溢出unsigned int。(使用区域或运营商前缀时,整数解释可能超过 4000000000。始终使用字符串存储电话号码。

基本上,gets()不是一个C++函数(它在那里是因为整个C库都可供C++使用(

问题是您将缓冲输入(使用stdio包(与缓冲C++输入系统的使用搞乱了。 缓冲区相互撞击。

不要混合使用 stdio 和 c++ 缓冲 I/O 系统,因为会遇到此类问题。 Turbo C++ 的实现内部发生的事情远非能够检查,因为 1( 您尚未透露您正在使用的 TC++ 版本,2( 我手头没有这样的编译器来进行测试。