c - 计算平均值的程序 : if to test chars

标签 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

非常感谢您的帮助!

最佳答案

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

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

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

关于c - 计算平均值的程序 : if to test chars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285477/

相关文章:

Javascript 数组参数问题

c - win32/C对话框: "modern" look/style for a combo box

c - 是什么让 D 成为一门好语言?

php - 如何将数据库中的值放入表中的特定列

使用 putchar() 函数和指针将整数转换为字符串

c - 将 char 缓冲区传递给函数并获取缓冲区的大小

c - 超过24个字符后strcat和strcmp添加随机字符

C 宏未按预期工作

c - 结构体和指针算术

ios - Swift 搜索 Array/NSArray 以获取多个值