0

试图制作一个可靠和安全地向用户询问日期的三个组成部分的功能 - 日,月和年......我可以让它询问日期......但是我需要能够使它只能输入数字,不能输入字母,也不能混合字母和数字......

#include <iostream>

using namespace std;

    int Day;
    int Month;
    int Year;   

int GetYear(){
    cout << "Enter a Year > ";
    int nYear;
    cin >> nYear;
    cout << "Year: ";
    Year = nYear;
    return nYear;
}

int GetMonth(){
    cout << "\nEnter a Month > ";
    int nMonth;
    cin >> nMonth;
    cout << "Month: ";
    Month = nMonth;
    return nMonth;
}

int GetDay(int nMonth, int nYear){
    cout << "\nEnter a Day > ";
    int nDay;
    cin >> nDay;
    cout << "Day: ";
    Day = nDay;
    return nDay;
}

bool GetDate(int nDay, int nMonth, int nYear){
    cout << "\nDate: ";
    cout << nDay << "/" << nMonth << "/" << nYear << "\n";
    return 0; //GetDate(Day, Month, Year);
}

void main() {

    cout << GetYear();
    cout << GetMonth();
    cout << GetDay(Month, Year);
    cout << GetDate(Day, Month, Year);

    cout <<"Press Enter Key To Exist...";
    cin.ignore (numeric_limits<streamsize>::max(), '\n' ); 
    cin.get();
}
4

2 回答 2

1

也许不是正确的方法...我在学校作业中使用它。

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

int getInputNumber()
{
    int key;
    do
    {
        key = _getch();
    }while (key < '0' || key > '9');
    std::cout << key - '0';
    return key - '0';
}

int main()
{
    int n = getInputNumber() ;
    system("pause");
    return 0;
}

另外,就在windows

您需要编写自己的函数,而不是输入大于 9 的数字。

于 2012-05-04T06:50:23.317 回答
0

一般情况下:这是不可能的

当您调用程序并使用 shell(或 Windows 上的 CMD 提示符)接口进行输入时,所有输入处理都由 shell 接口完成,而不是advisable为了只接受所需的字符集而摆弄它,因为shell 对您机器上的所有程序都是通用的。

这在技术上可以通过实现您自己的 shell 并将其替换为默认系统 shell 来实现,但我们不在这里讨论它,您不应该这样做 :)

您可以做的最好的事情是验证输入的有效数字。一个简单的 ASCII 值检查将为您完成。您还可以使用一些实用功能,例如atoistrtoul跳过给定输入中的无效字符,只使用连续的数字。

于 2012-05-04T06:50:09.317 回答