C ++字符串数组; for循环不能像我预期的那样工作

时间:2014-07-30 04:09:29

标签: c++ arrays for-loop

#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?这将导致其他并始终输出“偶数”。

3 个答案:

答案 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')

<强>更新

还有一个问题可能会使你绊倒。

  1. num未初始化。零初始化它。请注意,0与字符'0'不同。

    char num[10] = {0};
    
  2. num循环内移动for的初始化。这将消除先前执行循环的数据影响当前循环执行的问题。

  3. 这是一个适合我的版本。

    #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]!=' ')