正如您从屏幕截图中看到的那样,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;
}
答案 0 :(得分:2)
从标准输入读取时,请勿混用C库函数,例如fgets()
和C ++ std::cin
运算符。 C库对C ++库的作用一无所知。
将您的代码更改为仅使用stdin
或仅std::cin
来阅读标准输入。
答案 1 :(得分:0)
不要混合C和C ++输入流
使用stdin
或istream
。就这而言,这意味着不要在同一区域同时使用fgets()
和cin
。使用其中一个。要阅读带有空格的完整字符串,请使用std::getline(std::cin, input)
答案 2 :(得分:0)
thanx guys ....你的提示帮助...然而......我做了一些研究,发现我可以使用没有字符串类型字符串的getline ....(即由字符数组构成的字符串)使用cin.getline(string_name,string_size).....我更方便这个因为这个wud允许我使用所有传统的字符串函数没有问题..... thanx再次....