这是我在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;
}
这将是很大的帮助。谢谢。
答案 0 :(得分:1)
Turbo-C ++是古老的。有可用的免费编译器更好。尽管我知道在某些国家/地区,但教育工作者仍然需要它。但是,如果有任何方法可以使用替代方法,则应该这样做。您现在正在学习编写的代码将无法在行业中实际使用的编译器上进行编译。这会给您将来的工作带来麻烦。
gets
是有史以来最糟糕的功能,无法使其成为语言标准库。无法正确使用。永远不要使用它。从您的头脑中摆脱它的存在。
请勿混合使用C和C ++ I / O。这会导致棘手的问题,使它们不同步。只能单独使用一个。如果使用C I / O,则将scanf
(而不是fgets
)与stdin
和gets
一起使用。如果您使用C ++ I / O,则只能使用cin
。请注意,使用cin
解析“ d / m / y”日期有点棘手。另一方面,使用cin
将允许您使用string
代替字符数组,这将是无限优越的。 (例如,这意味着您可以输入超过9个字符的名称,而无需使程序做奇怪的事情。)
Gend
可能应该是单个char
,而不是没有指向任何内容的指针。程序的这一部分只是错误的,极有可能行为不当或崩溃。
电话号码不是整数。它们通常以零开头,在典型用法中包含标点和空格,并且足够长以使unsigned int
溢出。 (使用区域或运营商前缀时,整数解释可能会超过4000000000。)始终使用字符串存储电话号码。
答案 1 :(得分:0)
gets()
基本上不是C ++函数(之所以存在,是因为整个C库可用于C ++)
问题是,您正在将缓冲输入(使用stdio
包)与缓冲C ++输入系统搞混。缓冲区互相碰撞。
不要混合使用stdio和c ++缓冲的I / O系统,因为这样会遇到这类问题。 Turbo C ++的实现内部发生的事情远不能检查,因为1)您尚未公开要使用的TC ++版本,以及2)我手边没有这样的编译器可以进行测试。