#include <iostream>
using namespace std;
int main()
{
char num[10];
int a;
cout << "Odd or Even"<< endl;
for(;;)
{
cout << "Enter Number:" ;
cin >> num;
cout << endl;
for(a=9;a>=0;a--)
{
if(num[a]!='\0 && num[a]!=' ')
break;
}
if(num[a]==1 || num[a]==3 || num[a]==5 || num[a]==7 || num[a]==9)
cout << "Odd" << endl;
else
cout << "Even" << endl;
}
}
我是C ++的新手,我写了一个程序来区分数字是偶数还是奇数, 但无论我输入什么号码,它都只输出“偶数”。 所以我添加了这些以找出循环何时中断:
cout << a << endl;
cout << "\"" << num[a] << "\"" << endl;
结果:
Enter Number:11 9 " " Even
num[9]=' '
时for循环beraks?这将导致其他并始终输出“偶数”。
答案 0 :(得分:1)
您对字符'1'
和数字1
感到困惑。他们是不同的。
而不是
if(num[a]==1 || num[a]==3 || num[a]==5 || num[a]==7 || num[a]==9)
你需要
if(num[a]=='1' || num[a]=='3' || num[a]=='5' || num[a]=='7' || num[a]=='9')
<强>更新强>
还有一个问题可能会使你绊倒。
num
未初始化。零初始化它。请注意,0
与字符'0'
不同。
char num[10] = {0};
在num
循环内移动for
的初始化。这将消除先前执行循环的数据影响当前循环执行的问题。
这是一个适合我的版本。
#include <iostream>
using namespace std;
int main()
{
cout << "Odd or Even"<< endl;
for(;;)
{
char num[10] = {0};
int a;
cout << "Enter Number:" ;
cin >> num;
cout << endl;
for(a=9;a>=0;a--)
{
if(num[a]!='\0' && num[a]!=' ')
break;
}
cout << num[a] << endl;
if(num[a]=='1' || num[a]=='3' || num[a]=='5' || num[a]=='7' || num[a]=='9')
cout << "Odd" << endl;
else
cout << "Even" << endl;
}
}
<强> PS 强>
您可以替换
行 if(num[a]!='\0' && num[a]!=' ')
通过
if(isdigit(num[a]))
这对我来说更有意义。
答案 1 :(得分:0)
如果您使用c ++进行此操作,则有更简单的方法!请考虑以下事项:
while (!done) {
string inputline;
getline(cin, inputline); //Now we have a string with the users input!
stringstream ss; // stringstreams help us parse data in strings!
int num; // We have a number we want to put it into.
ss >> num; // We can use the string stream to parse this number.
// You can even add error checking!
// Now to check for odd even, what do we know about even numbers? divisable by 2!
if (num % 2 == 0) // No remainder from /2
cout << Even << '\n'
else
cout << Odd << '\n'
}
看看你如何使用它!
警告未经测试的代码
答案 2 :(得分:0)
你在这一行中犯了一个错误(拼写错误)..
if(num[a]!='\0 && num[a]!=' ')
应该是
if(num[a]!='\0' && num[a]!=' ')