【发布时间】:2018-09-19 23:56:58
【问题描述】:
我是 C++ 的新手,正在尝试制作一个简单的程序来确定用户输入的整数是否为四位数字,如果是,则反转所述数字的顺序并打印该输出。
我有一个(大部分)工作程序,但是当我尝试时,会发生以下两种情况之一:
a) 如果第 16 行被注释掉并且第 17 行处于活动状态,那么程序会打印出无数个反转的数字,并且 IDE(在本例中为 repl.it)崩溃;或
b) 如果第 17 行被注释掉并且第 16 行处于活动状态,那么程序会打印出一个正确的行,但下一行是“您的号码太短......再次”(请看下面的代码)
#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main() {
int n, reversedNumber, remainder;
bool loopControl;
char userFinalResponse;
reversedNumber=0;
cout<<"Input a 4 digit integer and press Return\n"<<endl;
cin>>n;
while (loopControl=true){
//if ((n>9999)||(n<1000))
if ((n>9999)||((n<1000)&&(n>0)))
{
cout<<"Your number is too short or too long. Please try again.\n"<<endl;
cin>>n;
loopControl=false;
} else {
while(n != 0)
{
remainder = n%10;
reversedNumber=reversedNumber*10+remainder;
n /= 10;
loopControl=true;
}//closing brace for reversal loop
cout<<"Your reversed number is "<<reversedNumber<<"\n"<<endl;
}//closing brace for else
}//closing brace for "while (loopControl>0){"
return 0;
}//closing brace for "int main() {"
【问题讨论】:
-
只需使用 std::to_string() 将数字转换为字符串,检查长度,调用 reverse 即可完成!
-
while (loopControl=true){此条件始终为真,循环永远不会终止。检查您最喜欢的 C++ 参考,了解赋值=和相等比较==之间的区别。除了使用n == 0的第一次运行之外的所有迭代,这就是n>0检查产生影响的原因。 -
或者更好的是,使用一个编译器,如果你使用了
=,而你的意思可能是==,它会发出警告。 -
确保您以足够高的警告级别进行编译,并且您会收到类似“警告:建议在赋值周围使用括号作为真值 [-Wparentheses] while (loopControl=true){”的编译警告。我将
-Wall -Wextra -pedantic用于 gcc/clang。不确定你会在 MSVC 上使用什么。