首页 > 解决方案 > scanf 中 *variable 的用法以及我们为什么使用它?

问题描述

你好,我是一个初学者,我一直在代码中看到这个,但我不知道它到底是什么意思......就像下面的例子

#include<stdio.h>

int main(void)
{
    char c1;
    do
    {
        scanf_s("%c%*c", &c1, 1);
        if ((c1>='a' && c1<='z')||(c1 >= 'A' && c1 <= 'Z'))
        {
            printf("%c  %d", c1, c1);
        }

    } while (c1!=0);
    return 0;
}

像这里它是转换字符还是存储它的值?(%*c) in scanf 对我来说是个谜,因为我不明白它是对内存的引用,但不会启动任何变量,它只是指向内存中存储的值......我对吗???

标签: cscanfformat-specifiers

解决方案


来自 C 标准(7.21.6.2 fscanf 函数)

3....在%之后,依次出现以下内容:

一个可选的赋值抑制字符 *

— 一个大于零的可选十进制整数,用于指定最大字段宽度(以字符为单位)。

— 一个可选的长度修饰符,指定接收对象的大小。

— 一个转换说明符字符,指定要应用的转换类型。

和(K.3.5.3.2 fscanf_s 函数)

4 fscanf_s 函数等效于 fscanf,除了 c、s 和 [ 转换说明符适用于一对参数(除非赋值抑制由 * 指示)....

所以在这个电话中

scanf_s("%c%*c", &c1, 1);

该格式%*c禁止将读取的字符分配给参数。通常这种方法用于从缓冲区中读取用户按下 Enter 键后出现的换行符。


推荐阅读