2016-09-02 4 views
-8

why is this not taking inputs for "Designation"?このコードは「指定」の入力を受け付けないのはなぜですか?

あなたはスクリーンショットからわかるように、fgets()関数は、文字列nameに取るように一度だけ実行されているが、それはdesignation文字列を受け付けていませんし、「給与」の入力にスキップされます。興味深いのは、この同じコードがTurboC3で完璧に動作しているという事実です。私はDevCPPのようなGCCコンパイラベースのIDEだけで、現在は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; 
} 
+8

タイトルを小文字に変換して質問を編集しました。一般的に言えば、すべての大文字で書かれた文章は、ネイティブスピーカーが大声で叫んでいるように感じられます。うまくいけば、この編集はより有用なフィードバックを引きつけます。 – templatetypedef

答えて

2

、Cライブラリなどfgets()として機能し、そしてC++ std::cin演算子を混在させないでください。 Cライブラリは、C++ライブラリが何をしているかについて何も知らない。

stdin、またはstd::cinのみを使用して標準入力を読み取るようにコードを変更してください。

0

CおよびC++入力が

どちらかstdinまたはistreamを使用しStreamsの混ぜないでください。換言すれば、同じ領域内にfgets()cinの両方を使用しないことを意味します。どちらか一方を使用してください。空白を含む完全な文字列を読むには、std::getline(std::cin, input)

+0

ありがとう...それは働いた........新しい何かを学んだ.....また、TurboC3はCとC++を混在させてC++を学習するために使用すべきではないことを学んだ –

0

thanx guys .... urヒントヘルプ...しかし、私はいくつかの研究を行い、文字列型の文字列なしでgetlineを使うことができることを発見しました。 ..(文字配列から作られた文字列)cin.getline(string_name、string_size)を使用して..... izもっと便利これはこのwud私が問題なく.....すべての従来の文字列関数を使用することができますもう一度....

関連する問題