【问题标题】:Turbo C++ cin() not working along with gets()Turbo C++ cin() 不能与 gets() 一起工作
【发布时间】:2018-10-20 07:54:04
【问题描述】:

这是我在 turbo C++ IDE 中使用 c++ 编写的代码 sn-p。我面临的问题是在使用gets() 之后,cin 无法正常工作,因为它正在跳过输入。有人可能会为这个问题提供解决方案吗? 这是代码 sn-p :-

        #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++ user-input turbo-c++


【解决方案1】:

Turbo-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。)始终使用字符串来存储电话号码。

【讨论】:

    【解决方案2】:

    基本上,gets() 不是 C++ 函数(它存在是因为整个 C 库都可用于 C++)

    问题是您在缓冲 C++ 输入系统中使用缓冲输入(使用 stdio 包)。并且缓冲区相互碰撞。

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

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      相关资源
      最近更新 更多