最后的魁拔 发表于 2019-11-30 18:44:10

这个scanf为啥不用取地址符,

那位大佬能纤细讲解一下#include <stdio.h>
int main()
{
        char name;
        int height;
        double weight,in,lb;
       
        printf("请输入您的姓名:");
        scanf("%s",&name);
        printf("请输入您的身高(cm):");
        scanf("%d",&height);
        printf("请输入您的体重(kg):");
        scanf("%lf",&weight);
       
        printf("======正在为您转换======\n");
        in = height/2.54;
        lb = weight/2.20;
        printf("%s的身高是%.2lf(in),体重是%.2lf(lb)\n",name,in,lb);
       
        return 0;
}

人造人 发表于 2019-11-30 18:53:04

数组的名字相当于数组第0个元素的地址
scanf("%s", name);
scanf("%s", &name);

上面两行代码是一样的效果,大多数人会选择第1种

jackz007 发表于 2019-11-30 21:05:55

本帖最后由 jackz007 于 2019-11-30 21:12 编辑

      凡是数组型的变量,其标识符代表的就是数组的起始地址,加了索引后,才成为普通变量,例如:
      char s[] = {"I love fishC"};
      s 是字符串的首地址,s 是普通 char 型变量,s = 'I',表达式 & s 与 s 是一个意思,表达的都是字符串 s 的起始地址。
      scanf() 只有在读取字符串时才不需要取址操作,读取其它任何非数组型变量时,都必须使用取址操作。

最后的魁拔 发表于 2019-12-7 10:27:04

for(i=1;i<month_2;i++)
        {
               
                if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                {
                        sum = sum +31;
                }
                else if(i==2)
                {
                        if(flag=1)
                        {
                                sum = sum + 29;
                        }
                        else if(flag=2)
                        {
                                sum = sum +28;
                        }
                       
                }
                else
                {
                        sum = sum +30;
                }
        }

最后的魁拔 发表于 2019-12-7 10:27:43

#include <stdio.h>

int main()
{
        char a;//生日
        char b;//现在
        int i;
        int sum=365;
        int day=365;
        int run_month;
        int flag;
       
        printf("请输入你的生日:(如1988-05-20):");
        for(i=0;i<10;i++)
        {
                scanf("%c",&a);
        }
        a='\0';
        printf("%s\n",a);
       
        printf("请输入现在的时期:(如2009-12-07):");
        getchar();
        for(i=0;i<10;i++)
        {
                scanf("%c",&b);
        }
        b='\0';
        printf("%s\n",b);
       
        int year_2 = (int)(b-'0')*1000+(int)(b-'0')*100+(int)(b-'0')*10+(int)(b-'0');
        int year_1=(int)(a-'0')*1000+(int)(a-'0')*100+(int)(a-'0')*10+(int)(a-'0');
        int month_2=(int)(b-'0')*10+(int)(b-'0');
        int month_1=(int)(a-'0')*10+(int)(a-'0');
        int day_2=(int)(b-'0')*10+(int)(b-'0');
        int day_1=(int)(a-'0')*10+(int)(a-'0');
       
        while(year_1<year_2)
        {
                if(year_1%4==0 && year_1%100!=0)
                {
                        day=366;
                        run_month = 29;
                        flag = 3;
                }
                else if(year_1%400==0)
                {
                        day=366;
                        run_month = 29;
                        flag=3;
                }
                else
                {
                        day=365;
                        run_month = 28;
                        flag=4;
                }
               
               
                sum = sum + day;
                year_1 = year_1+1;
        }
       
        if(year_2%4==0 && year_2%100!=0)
                {
                        run_month = 29;
                        flag = 1;
                }
                else if(year_2%400==0)
                {
                        run_month = 29;
                        flag=1;
                }
                else
                {
                        run_month = 28;
                        flag=2;
                }
               
        for(i=1;i<month_2;i++)
        {
               
                if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                {
                        sum = sum +31;
                }
                else if(i==2)
                {
                        if(flag==1)
                        {
                                sum = sum + 29;
                        }
                        else if(flag==2)
                        {
                                sum = sum +28;
                        }
                       
                }
                else
                {
                        sum = sum +30;
                }
        }
       
        for(i=1;i<month_1;i++)
        {
               
                if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                {
                        sum = sum -31;
                }
                else if(i==2)
                {
                        if(flag==3)
                        {
                                sum = sum - 29;
                        }
                        else if(flag==4)
                        {
                                sum = sum -28;
                        }
                       
                }
                else
                {
                        sum = sum -30;
                }
        }
        printf("%d\n",sum);
        printf("%d\n",year_1);
       
        return 0;
}
页: [1]
查看完整版本: 这个scanf为啥不用取地址符,