【问题标题】:Average generates a negative decimal number平均值生成一个负十进制数
【发布时间】:2015-07-12 16:14:52
【问题描述】:

我创建了一个名为 average 的函数来计算平均年龄。它是如何产生一个奇怪的负小数点的。它工作正常,直到我将 strcmp 函数提供给进入德克萨斯的人。年龄示例:20 50 20 30 和 40 生成平均年龄为 -243454739.00。 有人能指出我正确的方向吗,谢谢。

#include <stdio.h>
#include <string.h>

int main()
{
    //function decleration
    float average ( int A, int n);

    //int deleceration
    char names, states, statedata[100], namedata[100];
    int agedata[100], age, count = 0, A, n, avg;
    float a;

    //Get User Input 
    printf("Enter Number of family members being enter into program \n");
    scanf("%d", &n);

    //Name Loop
    for (names=0; names<n; ++names)
    {
        printf("Enter Family members name:\n");
        scanf("%s", &namedata);

        //Age Loop
        for (age=0; age<1; ++age)
        {       
            printf("Enter family members age:\n");
            scanf("%d", &agedata[age]);
            A +=agedata[age];
            count= count + 1;

            //State Loop
            for (states=0; states<1; ++states)
            {
                printf("Enter Family members state:\n");
                scanf("%s", &statedata);

                //strcmp function for state name "Texas" Selection
                if (strcmp(statedata,"texas")==0)
                {
                    printf("Family members who live in texas\n");
                    printf("%s\n", namedata);   
                }           
            }               
        }
    }

    // Average function call
    a = average(A, n);
    printf("The average age is %.2f\n", a);

    return 0;   
}   

//A declarator
float average( int A, int  n){
   float average;
   average = A / n;
   return average;
}   

【问题讨论】:

  • 请结束您的代码。更好的阅读,更容易理解,更少的错误......

标签: c function average


【解决方案1】:

main() 中将A 初始化为0。未初始化的局部变量在 C 中具有 indeterminate 值。

其他问题:

1)

scanf("%s", &namedata);
scanf("%s", &statedata);

应该是

scanf("%s", namedata);
scanf("%s", statedata);

因为scanf() 需要char* 格式说明符%s 而您传递char(*)[100]

2)

ages 的所有值都使用int 类型。因此,具有average() 函数返回float 仍然会给出int 结果。 将类型Amain())和函数参数Aaverage())更改为float

3)

您的内部正在运行0..1,即仅运行一次。所以你真的不需要那些循环。

【讨论】:

  • 您在第一点的scanf 语句有什么区别?
  • 已修复。复制粘贴以上行并忘记编辑。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多