-1

嗨,我无法验证此字符串是否为所有小数,即使我输入 9999,它仍然告诉我我的 if 语句为假。我认为这是一个错字,但我不知道在哪里。

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++)

在您的循环条件下,您需要iIn1.length().

于 2013-10-20T21:15:52.697 回答
3

你可能想改变

0<In1.length()

i<In1.length()
于 2013-10-20T21:15:56.537 回答
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 )

这些功能通常没有什么特别或戏剧性的,它们将操作应用于开始-结束序列中的每个元素。

你有find, count, copy,generate等等。他们的目的是澄清你的 for 语句的意图。您可以在http://en.cppreference.com/w/cpp/algorithm找到完整列表

于 2013-10-20T21:26:24.470 回答
2

您几乎肯定会发现,随着时间的推移,您会变得更加擅长将代码的不同部分分成它们各自提供的功能。使调试和以后的修改变得相当容易。

正如 Giraffe 船长指出的那样,它还使代码的意图更加清晰——这只会使阅读代码更容易、更快捷。

我没有使用 std::find_not_if,而是选择使用您选择的方法(基于重要的事情是知道如何获得正确答案的假设,而不是简单地提供正确答案- 好吧,那我不知道find_not_if' 的存在 :grin :) 你会看到我已经将它放入它自己的函数中,我从 main 调用它。该函数也只执行一项任务——检查字符串的有效性。任何尝试提示用户输入此文本,在出现错误时重新提示,最后对正确的输入采取行动,都是调用代码的唯一责任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 回答