为什么这段代码没有输入#34;指定"?

时间:2016-09-02 14:47:43

标签: c++ class gcc

why is this not taking inputs for "Designation"?

正如您从屏幕截图中看到的那样,fgets()函数只运行一次以接收字符串name,但它不接受designation字符串并跳过"工资"输入。更令我感到兴趣的是,这个相同的代码在TurboC3中运行得非常好....我只是在基于GCC编译器的IDE(例如DevCPP)和现在在Linux中的GCC中遇到问题。

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
using namespace std;

class emp
{
private:
    char name[20], desig[20];
    int id;
    float salary;

public:
    void getdata()
    {
        cout << "ENTER NAME:\n";
        fgets(name, 20, stdin);
        cout << "ENTER ID:\n";
        cin >> id;
        cout << "ENTER DESIGNATION:\n";
        fgets(desig, 20, stdin);
        cout << "ENTER SALARY:\n";
        cin >> salary;
    }

    void showdata()
    {
        cout << "NAME:- " << name << "\n";
        cout << "ID:- " << id << "\n";
        cout << "DESIGNATION: " << desig << "\n";
        cout << "SALARY: " << salary << "\n";
    }
};

int main()

{

    emp ins[3];
    int i;
    cout << "ENTER DETAILS:\n";
    for (i = 0; i < 3; i++)
        ins[i].getdata();
    cout << "*****************************DETAILS***************************\n";

    for (i = 0; i < 3; i++)
        ins[i].showdata();
    return 0;
}

3 个答案:

答案 0 :(得分:2)

从标准输入读取时,请勿混用C库函数,例如fgets()和C ++ std::cin运算符。 C库对C ++库的作用一无所知。

将您的代码更改为仅使用stdin或仅std::cin来阅读标准输入。

答案 1 :(得分:0)

不要混合C和C ++输入流

使用stdinistream。就这而言,这意味着不要在同一区域同时使用fgets()cin。使用其中一个。要阅读带有空格的完整字符串,请使用std::getline(std::cin, input)

答案 2 :(得分:0)

thanx guys ....你的提示帮助...然而......我做了一些研究,发现我可以使用没有字符串类型字符串的getline ....(即由字符数组构成的字符串)使用cin.getline(string_name,string_size).....我更方便这个因为这个wud允许我使用所有传统的字符串函数没有问题..... thanx再次....