为什么我的scanf语句不起作用?

时间:2015-07-22 09:12:59

标签: c scanf

我是初学者但是我已经在这个代码上工作了一个星期而且我无法使scanf函数工作。我的所有printf函数都输出正常,但如果我输入我的信息来测试我的代码,我什么也得不到。我错过了一些简单的东西吗?

#include <stdio.h>
float average(float a[]);
int main ()
{
    /* variable definition: */
    char personsName[100];
    char personsAge[3];
    char personsState[20];
    float Age, Texas;
    int people,age,i,count,Avg,None;
    // Loop through 50 people
    for (people=0; people <2 ; people++)
    {

        Age =0.0;
        printf("Enter Persons Name \n");
        scanf("%s", personsName);
        printf("Enter None if this is last family member. \n");
        scanf("%s", personsName);
        {
            if (personsName == None)
                break;
        }
    }
    {
        printf("Enter Persons Age \n");
        scanf("%s", personsAge);
        float average(float a[])
        {
            printf("Average of all family members is %f \n");
            int i;
            float avg, sum=0.0;
            for(i=0;i<50;++i)
                sum+=a[i];
            avg =(sum/i);

            return avg;
        }
    }
    {
        printf("Enter Persons State \n");
        scanf("%s", personsState);
        while (Texas > 0)
        {
            printf("Enter Texas\n");
            scanf("%f",&Texas);
            //Only assign if positive
            if (Texas > 0)
            {
                personsState[count]=Texas;
                count = count + 1;
                break;
            }
        }
    }
    // Print data
    for (i=0; i<count;i++)
    {
        printf ("Texas %f is %d\n", i,personsState[i]);
        if (count == 50)
            break;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

问题,我认为是

if (personsName == None)

这不是比较两个字符串的方法。您需要使用strcmp()来比较内容。

此外,两个连续的scanf()具有相同的参数来存储输入。第二个scanf()将覆盖先前获取的输入。

FWIW,None不是字符串。您需要使用"None"来表示字符串。

也就是说,通过scanf()的不受控制的输入可能导致缓冲区溢出。最好使用长度说明符来限制扫描,例如

 scanf("%99s", personsName);

等等。