【问题标题】:Program that displays if a given number is even or odd显示给定数字是偶数还是奇数的程序
【发布时间】:2013-12-09 03:01:51
【问题描述】:

我编写了这个简单的代码,输入 5 个整数,说明它们是偶数还是奇数(我必须使用两个数组)。但无论我写什么数字,输出总是“5 奇数”。我哪里错了?

#include <stdio.h>

int main(){

int numbers[5];
int even_odd[5];

printf("%s\n", "Insert 5 numbers.");

int i;
for(i=0; i<=4; i++){
    scanf("%d", &numbers[i]);
    even_odd[i] = numbers[i] % 2;
    }

for(i=0; i<=4; i++);{
    if (even_odd[i] == 0){
        printf("%d%s\n", numbers[i], " even.");
    }else{
        printf("%d%s\n", numbers[i], " odd.");
        }
    }

return 0;
}

【问题讨论】:

    标签: c arrays for-loop numbers printf


    【解决方案1】:

    一个基本问题是这条线-

    int i;
    

    变量不应该在printf 语句之后声明。如果你在它本身之前声明它会更好。 scanf 应该始终是 printf 之后的下一个语句,其中涉及输入。 然后你在for循环声明之后放了一个分号。应该是这样的-

    for(i=0;i<=4;i++)
    

    除了这两个问题之外,代码运行正常。我已经检查过了。输出完美。

    【讨论】:

    • 为什么要在printf之前声明?为什么要把scanf放在printf之后呢?
    • 在c中,声明本身在开始时就完成了很多。 scanf 用于接受任何输入,因此每当给出 printf 以接受来自键盘的输入时,应该有一个 scanf 跟随它来接受输入。所以 scanf 总是跟随 printf。代码将无法正常工作如果不是那样的话。
    【解决方案2】:
    for(i=0; i<=4; i++);-------> Your for loop never does what it should.
    {
      if (even_odd[i] == 0) {
        printf("%d%s\n", numbers[i], " even.");
      } else {
        printf("%d%s\n", numbers[i], " odd.");
      }
    }
    

    For 循环运行 5 次,最后是 i=5,所以它的 even_odd[5] 被检查为零。

    很幸运,您没有撞车。 C 不检查数组边界,所以你的程序运行了。

    【讨论】:

      【解决方案3】:

      for(i=0; i&lt;=4; i++);{

      这就是您的问题所在。
      for 循环语句之后有一个分号。

      这转化为一个循环,只会将i 递增几次。
      然后你就可以运行这段代码了:

      {
          if (even_odd[i] == 0) {
              printf("%d%s\n", numbers[i], " even.");
          } else {
              printf("%d%s\n", numbers[i], " odd.");
          }
      }
      

      【讨论】:

        【解决方案4】:

        问题是额外的;在结束 ) 和开始 { in

        之间
        for(i=0; i<=4; i++);{
        

        删除它,它会正常工作。

        原因:声明

            for(i=0; i<=4; i++);
        

        只运行循环,不执行它后面的代码块。

        之后,{ 和 } 之间的代码块被执行,但随后 i == 5 并且输出将是未定义的。

        【讨论】:

          【解决方案5】:

          尽量去掉分号

          for(i=0; i<=4; i++){
          

          所以你的代码会是这样的:

          for(i=0; i<=4; i++){   //Remove the semicolon here
              if (even_odd[i] == 0){
                  printf("%d%s\n", numbers[i], " even.");
              }else{
                  printf("%d%s\n", numbers[i], " odd.");
                  }
              }
          

          【讨论】:

            【解决方案6】:

            for(i=0;i

            有一个分号,不应该在那里

            for(i=0;i

            这边

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-11-12
              • 1970-01-01
              • 1970-01-01
              • 2015-05-31
              • 1970-01-01
              • 1970-01-01
              • 2015-07-22
              • 1970-01-01
              相关资源
              最近更新 更多