#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 循环中断?这将导致 else 并始终输出“Even”。
最佳答案
您对字符 '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;
}
}
附言
可以换行
if(num[a]!='\0' && num[a]!=' ')
通过
if(isdigit(num[a]))
这对我来说更有意义。
关于C++ 字符串数组和 for 循环没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028630/