3

コーディングQを試していますが、入力がないかどうかを検出するコード行を探しています(ユーザーがEnterキーを押すだけです)。関連するデータ型はintです。

私はこの問題について他のいくつかのQを読みましたが、私のニーズにうまく適合しませんでした。私はeofや他のそのような提案を無駄に試しました...

これがコードです-

#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
int main() {
int ogv,cgv=0,i,j=0,k;
int arr [3];
vector<int> ans;
while(true) {
    cgv=0;
    cin>>ogv;
    //if("ogv is not a number, just an enter") 
          break;
    arr[0]=floor(ogv/4);
    arr[1]=floor(ogv/3);
    arr[2]=floor(ogv/2);
    for(i=0;i<=2;i++) {
        if (arr[i]<0)
            arr[i]=0;
        cgv+=arr[i];
    }

    if(ogv>cgv) {
        ans.push_back(ogv);
    }
    else {
        ans.push_back(cgv);
    }
   j++;
}
for(k=0;k<j;k++) {
    cout<<ans.at(k)<<endl;
}
}

あなたの助けは大歓迎です...!:D

ありがとう

4

2 に答える 2

2

noskipws マニピュレータを使用できます

例:

int x = -1;
cin>>noskipws>>x;
if(x==-1)
{
    // no number was entered, the user just pressed enter
}
else
{
    // the user entered a number
}


編集:これをループで使用するには、各読み取り試行の前に、現在バッファーにある文字を破棄する必要があります。

たとえば、ループの最初の繰り返しでユーザーが数字の 4 を入力して Enter キーを押すと、cin は 4 を読み取りますが、行末文字はバッファーに残ります。2 回目の繰り返しで読み取りが発生すると、cin はバッファ内の行末文字を確認し、ユーザーがエンターを押してループを終了したかのように扱います。

このメソッドを使用sync()して、バッファ内の未読文字を破棄できます。からの読み取りを試みる前に、これを行う必要がありますcin

cin.sync();
cin >> noskipws >> x;
于 2012-06-09T09:09:11.977 に答える
0

ストリームを使用して整数を入力すると、それを読み込む前に空白がスキップされます。これには、入力できる改行文字が含まれます。

言い換えると:

int i;
std::cin >> i;

非空白が見つかるまで戻りません。

空行を検出したい場合は、通常getline、完全な行を文字列に取得するために使用し、次に文字列ストリームを使用してそれを整数に変換します。次のようになります。

#include <iostream>
#include <string>
#include <sstream>

int main (void) {
    std::string s;
    int i = -1;

    std::cout << "Enter string: ";
    std::getline (std::cin, s);
    std::cout << "String is '" << s << "'\n";

    std::stringstream ss (s);
    ss >> i;
    std::cout << "Integer is " << i << "\n";

    return 0;
}

トランスクリプトは次のとおりです。

pax> ./qq
Enter string: 
String is ''
Integer is -1

pax> ./qq
Enter string: hello
String is 'hello'
Integer is -1

pax> ./qq
Enter string: 0
String is '0'
Integer is 0

pax> ./qq
Enter string: 1
String is '1'
Integer is 1

pax> ./qq
Enter string: 314159
String is '314159'
Integer is 314159
于 2012-06-09T09:04:31.990 に答える