0

日付の 3 つの構成要素 (日、月、年) をユーザーに確実かつ安全に尋ねる関数を作成しようとしています...日付を要求するようにできます...しかし、できるようにする必要があります数字のみを入力でき、文字は入力できず、文字と数字が混在しないようにします...

#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;
}

また、窓だけで

9 より大きい数値を入力するよりも、独自の関数を作成する必要があります。

于 2012-05-04T06:50:23.317 に答える
0

一般的な注意事項:それは不可能です

プログラムを起動し、シェル (または Windows では CMD プロンプト) インターフェイスを使用して入力を取得する場合、すべての入力処理はシェル インターフェイスによって行われadvisable、必要な文字セットのみを受け入れるためにそれをいじる必要はありません。シェルは、マシン上のすべてのプログラムに共通です。

これは、独自のシェルを実装し、それをデフォルトのシステム シェルに置き換えることで技術的に可能ですが、ここでは議論しないでください。そうするべきではありません :)

あなたができる最善のことは、入力が有効な数値であることを確認することです。簡単な ASCII 値チェックでそれができます。atoiまたはのようないくつかのユーティリティ関数を使用strtoulして、指定された入力の無効な文字をスキップし、連続した数字のみを使用することもできます。

于 2012-05-04T06:50:09.317 に答える