scanf和printf什么时候用&?

intn,i,h,m;chara[10];scanf("%d",&n);for(i=0;i<n;i++){scanf("%s%d%d",&a[i],&h,&m);if((... int n,i,h,m;
char a[10];
scanf("%d",&n);
for
(i=0;i<n;i++)
{
scanf("%s%d%d",&a[i],&h,&m);
if((h<15||h>20)||(m<50||m>70))
printf("%s\n",&a[i]);
}
为什么这个程序里printf也要加&才能运行成功啊
要不然就是scanf不加&才能运行成功
展开
 我来答
金色潜鸟
2021-10-23 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5704万
展开全部
这几个 & 是求地址运算符号。
普通变量,例如 int, float, double , 语句中的变量名,表示 变量的值,加上 & 才是地址。
字符串变量不同于上述普通变量,它用 char 数组表示,例如 char a[10]。 变量的名字 a , 表示的是字符串的首地址。
输入语句scanf 是有格式输入,输入参数都要用 变量的地址。
例如:scanf("%s%d%d",a, &h, &m); 这里的a 是 char a[10] 的首地址,等于 首字符 a[0] 的 地址 &a[0].
输入语句printf() 是有格式输出,普通变量,输出参数都要用 变量的值表示,字符串输出格式%s, 对应的参数 却是要用 输出字符串的首地址表示。
例如: printf("%s %d %d\n", a, h, m);
你的 printf("%s\n",&a[i]); 这里 &a[i] 意思是 输出字符串的首地址 是 &a[i], 也就是从 char a[10] 中 第 i 个 字符 开始输出。
例如: char a[10]="ABCDEFG";
printf("%s\n",a); 输出ABCDEFG
i=3; printf("%s\n", &a[i]); 输出 DEFG
printf("%c\n", a[i]); 输出 D
i=4; printf("%s\n", &a[i]); 输出 EFG
printf("%c\n", a[i]); 输出 E
注意,记住 与 %s 格式 有关的输入输出 比较 特殊,输入输出都要用字符串地址。
若是 %c 格式,那么 就要按普通 字符变量 对待。 不要混淆 “字符串”与 “字符”的概念。
更多追问追答
追问
“注意,记住 与 %s 格式 有关的输入输出 比较 特殊,输入输出都要用字符串地址。”
这句话是在一维数组中适用吗?我看了这一题的另一个答案,是用二维数组做的,他最后的printf里直接是a[i]没有加&。
刚开始学,不太懂,麻烦了
“注意,记住 与 %s 格式 有关的输入输出 比较 特殊,输入输出都要用字符串地址。”
这句话是在一维数组中适用吗?我看了这一题的另一个答案,是用二维数组做的,他最后的printf里直接是a[i]没有加&。
刚开始学,不太懂,麻烦了
丰收多喜悦
2021-10-23 · 超过20用户采纳过TA的回答
知道答主
回答量:99
采纳率:33%
帮助的人:4.5万
展开全部

因为printf("%s\n",&a[i]);要显示的是字符串,需要字符串所在的地址,而a[i]是字符类型,所以要加&来取得a[i]的地址。不用&的话,可以改为a+i,即printf("%s\n",a+i);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Yuqi_Tan

2021-12-06 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3462万
展开全部
数字和字符连续的变量,scanf输入变量时,必须加&,因为它需要变量的地址。printf输出时不需要加&,因为它不需要地址。
字符串变量,输入和输出时,都需要地址。所以都应该需要&,但因为数组名就代表地址,所以,只写变量名时,就不需要加&了,但如果写元素名,就要加&了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2021-10-23 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
在scanf函数中读取整数、浮点数、单个字符时,相应的变量前要使用取地址符&。在scanf函数中使用%s读取字符串时,不用&的。在printf中,全部不使用&的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小xun爱健身

2021-12-27 · 记录美好生活瞬间吧!
小xun爱健身
采纳数:41 获赞数:40

向TA提问 私信TA
展开全部
在输出的时候用&这个符号,scanf用户提示用户输入,printf用于计算后输出信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式