用于计算值的平均值的程序:if to test chars

时间:2015-08-29 11:22:44

标签: c arrays char

请查看一个程序,提示用户输入3个值并计算这些值的平均值。 我决定添加一个测试条件,检查用户是否输入了数字或字符。

// a program that calculates the average of an array of 3 floating-point values; with for loop

#include <stdio.h>

int main (void)
{
    float values[3];
    float element;
    float sum = 0;
    int i;

    printf ("Please, enter 3 floating values:  \n");

    for ( i = 0; i < 3; i++)
    {
        if (scanf ("%f", &element) == 1)
        {
            if ( (element >= 'a' && element <= 'z') || (element >= 'A' && element <= 'Z') )
                printf ("Sorry, you have entered letters\n");

            else if (element <= 0)
                printf ("Please, enter positive values\n");

            else
                values[i] = element;
                sum += values[i];
        }
    }

    printf ("The average of 3 values is %.2f\n", sum / 3);

    return 0;
}

当我运行程序时,我遇到以下问题: 1)它似乎与正数一致;

2)当我尝试输入负数时,程序会打印所需的语句,但结果仍会增加到i,从而减少了进一步的条目数;此外,即使数字是负数,该程序仍然会产生一些平均的无意义值。

Please, enter 3 floating values:  
-75
Please, enter positive values
98
Sorry, you have entered letters
-786.9
Please, enter positive values
The average of 3 values is 2087205705198174400484999168

3)当我用字母测试程序时,它仍会返回一些平均值,但是为零:

Please, enter 3 floating values:  
jklj
The average of 3 values is 0.00

我很感激你的帮助!

2 个答案:

答案 0 :(得分:2)

  1. 您的element将永远不会包含字母,因为您已将其声明为浮动并将其扫描为浮动。如果你想知道你是否收到了一个字母,你应该读一个字符串,测试它,然后才将它转换为float(比较element'a'实际上是将它映射到ASCII码'a' = 97)。

  2. 关于错误的总和 - 你忘记了else块的大括号。将其更改为:

    else {
        values[i] = element;
        sum += values[i];
    }
    

答案 1 :(得分:0)

如果您希望程序在输入负数时结束,则可以使用return语句或者为更多情况递减i的值。至于字母,它永远不会进入if块,所以你可以使用else。请尝试以下方法:

#include <stdio.h>

int main (void)
{
    float values[3];
    float element;
    float sum = 0;
    int i;
    printf ("Please, enter 3 floating values:  \n");
    for ( i = 0; i < 3; i++)
          {
              if (scanf ("%f", &element) == 1)
                    {
                         if (element <= 0)
                            {
                                 printf ("Please, enter positive values\n");
                                 i--; // or use the return statement
                             }
                        else
                           {
                                 values[i] = element;
                                sum += values[i];
                           }
                       }
               else
                  {
                         printf("You entered special characters");
                         return;
                   }
    }
   printf ("The average of 3 values is %.2f\n", sum / 3);
   return 0;
}