-1

こんにちは、この文字列がすべて 10 進数であることを検証するのに問題があります。9999 と入力しても、if ステートメントが false であることがわかります。誤字だと思うのですがどこかわかりません。

cout<<"Enter a very large number"<<endl;
cin>>In1;                            //inputs a string
for(int i=0; 0<In1.length();i++){    //the loop that goes thru each index
    if (!(isdigit(In1[i]))){         //validates each index
        //tells the user to try again
        cout<<"You did not enter a valid input, please try again"<<endl;
        In1="";
        cin>>In1;
        i=0;//starts the loop over if reached
    }
}

入力が正しいか間違っているかに関係なく、「有効な入力を入力しませんでした。もう一度やり直してください」というメッセージが表示され続けます。

4

4 に答える 4

5
for(int i=0; 0<In1.length();i++){

あなたがしたことを見ますか?への変更

for(int i=0; i<In1.length();i++)

iループ条件では、 と比較する必要がありますIn1.length()

于 2013-10-20T21:15:52.697 に答える
3

使用する

#include<algorithm>

if ( std::find_not_if( in1.begin(), in1.end(), isdigit ) != in1.end() ){ ...

この不幸な事件を防ぐことができた可能性があり、その意図も非常に明確です。デュアル _not/!= はそれをわずかに混乱させますが、それでもまだです。

単純な for- ステートメントの一般的な使用法を置き換える、かなりの数の便利なアルゴリズムがあります。それらのほとんどはフォーム上にあります

do_this( where_to_start, where_to_end, do_this_operation )

通常、これらの関数には特別なことや劇的なことは何もありません。開始-終了シーケンスの各要素に操作を適用します。

findcountcopy、およびgenerateいくつかの言及があります。その目的は、for ステートメントの意図を明確にすることです。完全なリストはhttp://en.cppreference.com/w/cpp/algorithmにあります。

于 2013-10-20T21:26:24.470 に答える
3

変更したい場合があります

0<In1.length()

i<In1.length()
于 2013-10-20T21:15:56.537 に答える
2

ほとんどの場合、時間の経過とともに、コードのさまざまな部分をそれぞれが提供する機能に分離することに熟達していることに気付くでしょう。デバッグとその後の変更を大幅に容易にします。

また、Captain Giraffe が指摘するように、コードの意図がより明確になり、コードをより簡単かつ迅速に読み取ることができます。

私はstd::find_not_ifを使用していません。代わりに、選択した方法を使用することを選択しました(重要なことは、正しい答えを単に提供するのではなく、正しい答えを得る方法を知っているという仮定に基づいています-まあ、それと私は の存在知りませんfind_not_if:grin:) main から呼び出す独自の関数にそれをチャックしたことがわかります。この関数は、文字列の有効性をチェックするという 1 つのタスクのみを実行します。ユーザーにこのテキストを要求し、エラーが発生した場合は再度要求し、最終的に正しい入力に対してアクションを実行しようとする試みは、呼び出しを行うコードの単独の責任です。isValidNumericalString- main の単一の大きな本体を持つのとは対照的に、これらの関数を独自の関数にスローできない理由はありません。

#include <iostream>

using namespace std;

// returns true if all characters in string are numerical (0-9)
bool isValidNumericalString(string inputString)
{
    int i, n = inputString.length();
    for (i=0; i<n; i++)
        if ( !isdigit(inputString[i]) )
            return false;
    return true;
}

int main()
{
    string In1;

    cout << "Enter a very large number (digits 0-9 only. 10e1 is unacceptable): ";
    cin >> In1;

    while (!isValidNumericalString(In1))
    {
        cout << "You did not enter a valid input, please try again :p" << endl;
        cout << "Enter a very large number (digits 0-9 only. 10e1 is unacceptable): ";
        cin >> In1;
    }

    cout << "Congratulations - '" << In1 << "' is a valid string representation of a number" << endl;

    return 0;
}
于 2013-10-20T21:46:41.593 に答える