首页 > 解决方案 > 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);,第二个有前缀 & 在权重之前。

我如何区分哪种情况添加前缀?

标签: c

解决方案


scanf()代表扫描格式化字符串。现在在扫描来自标准的输入时input streamscanf()需要将该输入数据放入某个地方。要存储格式化的input datascanf()需要知道相同数据类型的变量的内存位置。这就是为什么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

推荐阅读