嗨我无法验证这个字符串是否为全小数,即使我输入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
}
}
我一直收到“您没有输入有效输入,请再试一次”,无论我输入的是对还是错。
答案 0 :(得分:5)
for(int i=0; 0<In1.length();i++){
看看你做了什么?改为
for(int i=0; i<In1.length();i++)
在循环条件中,您需要将i
与In1.length()
进行比较。
答案 1 :(得分:3)
您可能想要更改
0<In1.length()
到
i<In1.length()
答案 2 :(得分: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
提及一些。他们的目的是澄清你的陈述的意图。您可以在http://en.cppreference.com/w/cpp/algorithm
答案 3 :(得分:2)
您几乎肯定会发现,随着时间的推移,您会更加擅长将不同的代码部分分离到它们各自提供的功能中。使调试和以后的修改变得相当容易。
正如长颈鹿队长所指出的那样,这也使得代码的意图更加清晰 - 只能让代码更容易阅读。更快。
我没有使用std :: find_not_if,而是选择使用您选择的方法(基于重要的事情是知道如何获得正确答案的假设,如反对简单地提供正确答案 - 好吧,和我不知道find_not_if
的存在:咧嘴笑:)你会看到我已经将它放入它自己的功能中,我从main调用它。该函数也只执行单个任务 - 检查字符串的有效性。任何尝试提示用户输入此文本,在出现错误时重新提示并最终对正确的输入采取操作的行为是调用isValidNumericalString
的代码的唯一责任 - 没有理由你不能扔这些功能融入了自己的功能,而不是拥有一个庞大的主体。
#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;
}