2016-11-07 10 views
1

IのdevのC++とコードを使用して(複数のプログラムで)このコードを試してみました::ブロックが、最初の取得()コマンドCINが続いたときに実行されることはありません飽きないだろう>>なぜこのコードで最初にgets()が機能しないのですか?

#include<iostream> 
#include<stdio.h> 

using namespace std; 
int main() 
{ 
int i; 
char c[10], d[10]; 
cout<<"Enter int "; 
cin>>i; 
cout<<"Enter string "; 
gets(c); // this is where things act all possessed 
cout<<"Enter 2nd string "; 
gets(d); 
cout<<i<<endl<<c<<endl<<d; 
return 0; 
} 

を私を助けてください。私が試してみました何

を私はcharとして変数を取って試してみましたが、その後、使用して入力を取ることだけで完璧に に動作しますが、その後、私は厳密に整数としてそれを取る必要がある、()の取得します、いくつかのプログラムでは、物事を行うことができるようにkeのインクリメント/デクリメント/何でも

+3

'gets'を使用しないでください。これは古いC日からの遺物です。それはバッファオーバーフローが起こり易い関数の破損です。 Cを使っていたら、代わりに 'fgets'を使うことをお勧めします。しかし、C++を使っているので、 'cin'を' char'文字列の代わりに 'std :: string'と一緒に使う必要があると思います。 – user694733

+0

@ user694733 OPの問題は、取得が安全ではなく、動作の誤解についてです。彼はcin.getLine()や他のものと同じ問題を抱くでしょう –

+0

@DenisSheremetしたがってコメントではなく、答えです。しかし、それはかなりのくその関数だから、とにかく 'gets'を使うのはまだ誤りです。 – user694733

答えて

1

「実行されていません。」ではなく、空の文字列を返します。これは、cinが読み取りを終了した行にカーソルを残すために発生します。何か可能な方法でこの行を読んでください。たとえば、あるバッファに同じを読んでください。

関連する問題