c - scanf("%f", &weight) 和 scanf("%f", weight) 如何判断何时添加前缀 &
问题描述
我阅读了以下代码:
//talkback.c -- nosy, informative program
#include <stdio.h>
#include <string.h> //for strlen() prototype
#define DENSITY 62.4 //human density in lbs per cu ft
int main() {
float weight, volume;
int size, letters;
char name[40]; //name is an array of 40 characters
printf("Hi! What's your first name?\n");
scanf("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volumn is %2.2f cubit feet.\n", name, volume);
printf("Also, your first name has %d letters, \n", letters);
printf("and we have %d bytes to store it.\n", size);
}
运行它并输出:
In [13]: !./a.out
Hi! What's your first name?
Hery
Hery, what's your weight in pounds?
100
Well, Hery, your volumn is 1.60 cubit feet.
Also, your first name has 4 letters,
and we have 40 bytes to store it.
我注意到 scanf("%s", name);
and scanf("%f", &weight);
,第二个有前缀 & 在权重之前。
我如何区分哪种情况添加前缀?
解决方案
scanf()
代表扫描格式化字符串。现在在扫描来自标准的输入时input stream
,scanf()
需要将该输入数据放入某个地方。要存储格式化的input data
,scanf()
需要知道相同数据类型的变量的内存位置。这就是为什么scanf()
需要一个指针(C
存储变量或表达式的内存位置的指针)来存储输入。( address-of operator
&) 前面的变量 ie&var
表示变量 'var' 的内存位置。
int var;
scanf("%d",&var);
char str[20];
scanf("%s",str);
对于第二个示例,我们不需要地址运算符,因为C 将数组名称变量视为指针。
printf()
是 的反函数scanf()
。它将格式化的字符串打印到标准输出。Printf 不需要任何内存位置来打印输出,它只需要变量来获取数据并根据格式说明符对其进行格式化。
printf("%c in ASCII is %d",65,65);
The output will be: A in ASCII is 65
推荐阅读
- git - 如何仅使用依赖于其他差异的当前提交更改来区分差异?
- ios - 如何将 URLSession 委托与预定的 BackgroundTasks 框架一起使用
- javascript - 更改无状态组件的反应状态
- ldap - Moqui 使用 Shiro 使用 LDAP 身份验证时,Moqui 重置或更改 LDAP 密码
- regex - gatsby babel transformIgnorePatterns:帮助编写正则表达式以包含除一个之外的所有项目
- jquery - 使用 jQuery 解析嵌套 JSON 中的第二级
- ios - Cocoapods 没有将新的 pod/依赖项完全添加到现有的工作区项目中
- typescript - 茉莉花如何对从间谍方法返回的对象寄予期望
- spring - 取决于单声道分辨率的通量
- python-3.x - 树莓派认为按钮一直被按下