所以我试图创建一个条件,这样如果用户输入除整数之外的任何内容,程序将终止。每当我说出字母A,程序重复输出零。我认为它的exit()就是问题,但当我替换它时,我遇到了同样的问题。建议?
#include <iostream>
#include <cctype>
#include <cstdlib>
using namespace std;
void even(int);
void odd(int);
int main()
{
int i;
do{
cout << "Enter an integer" << endl;
cin >> i;
if(i % 2 == 0)
even(i);
else if (i % 2 == 1)
odd(i);
else if (cin.fail())
exit (0);
}while(!isdigit(i));
return (0);
}
void even(int i)
{
cout << i << endl;
}
void odd (int i)
{
//nothing here
}
答案 0 :(得分:2)
如果i
失败,则不会分配变量(i % 2 == 0)
。在您的程序中,这意味着它仍然具有不确定的值。使用i
中的不确定值是未定义的行为,这意味着就C ++标准而言,任何事情都可能发生。
在大多数常见系统中,变量i
将具有一些值,无论上次使用某个寄存器或内存时遗留的是什么。该值将是偶数或奇数。因此,如果fail
恰好是零或正数,则永远不会达到if
检查。
您可能希望重新排序cin
支票,先检查i
,如果提取成功则仅使用if startswith(stripped, "ren") & !startswith(stripped, "renvars")
leftpad = " " ^ search("$ln", 'r')
words = split(stripped, " ")
varname = string(leftpad, " note ", words[3], ": ", words[2], " \n")
print(varname)
write(g, varname)
end
。
答案 1 :(得分:1)
我想你的程序中的一些小调整可以为你解决问题:
if (cin.fail())
exit (0);
else if(i % 2 == 0)
even(i);
else if (i % 2 == 1)
odd(i);