这个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;
}
数组的名字相当于数组第0个元素的地址
scanf("%s", name);
scanf("%s", &name);
上面两行代码是一样的效果,大多数人会选择第1种 本帖最后由 jackz007 于 2019-11-30 21:12 编辑
凡是数组型的变量,其标识符代表的就是数组的起始地址,加了索引后,才成为普通变量,例如:
char s[] = {"I love fishC"};
s 是字符串的首地址,s 是普通 char 型变量,s = 'I',表达式 & s 与 s 是一个意思,表达的都是字符串 s 的起始地址。
scanf() 只有在读取字符串时才不需要取址操作,读取其它任何非数组型变量时,都必须使用取址操作。
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;
}
} #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]