3

我正在尝试编码 Q 并且正在寻找一行代码来检测是否没有给出输入(用户只需按 Enter 键)。相关的数据类型是 int。

我读过一些关于这个问题的其他问题,但不符合我的需求。我已经尝试过 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,但会将行尾字符留在缓冲区中。当读取发生在第二次迭代中时,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 回答