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 Texasn");
            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 %dn", i,personsState[i]);
        if (count == 50)
            break;
    }
    return 0;
}

我认为问题出在

if (personsName == None)

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

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

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

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

 scanf("%99s", personsName);