scanf()函数基本介绍

scanf函数作用详解

    • 一 scanf() 函数作用:
    • 二 基本语法:
    • 三 格式化字符串:
    • 四 scanf() 的读取过程

一 scanf() 函数作用:

scanf() 是 C 语言标准库中的一个输入函数,其主要作用是从标准输入(通常是键盘)或其他输入流中读取数据,并根据提供的格式字符串将数据转换为指定的类型。以下是 scanf() 的主要作用:

数据输入: scanf() 用于从输入流中读取数据。用户可以通过键盘输入,或者数据可以来自其他输入流。

格式化输入: scanf() 使用格式字符串来指定输入的格式。格式字符串包含文本字符和转换说明符,告诉函数如何解释输入数据的类型和格式。

数据转换: 根据格式字符串中的转换说明符,scanf() 将输入的字符序列转换为相应的数据类型,例如整数、浮点数、字符等。

变量赋值: 转换后的数据被存储在提供给 scanf() 的变量中。这样,程序就能够在后续代码中使用这些变量来进行计算、比较或其他操作。

二 基本语法:

int scanf(const char *format, ...);

format 参数是一个字符串,包含了转换说明符(conversion specifiers),每个说明符对应要读取的变量的类型。这些说明符以 % 开头,例如 %d 表示整数,%f 表示浮点数,%c 表示字符等。

… 表示可变参数,对应于 format 中的每个转换说明符,即要读取的变量。
尽量保证可变参数与转换说明符的数量相等。

返回值是成功读取并转换的参数个数。如果返回值小于参数的个数,可能表示读取失败或到达文件末尾。

三 格式化字符串:

格式化字符串是 scanf() 函数的核心。它包含了转换说明符,用于指定输入的数据类型和存储位置。一些常见的转换说明符包括:

%d:读取整数
%f:读取浮点数
%c:读取字符
%s:读取字符串
%lf:读取双精度浮点数
%p:读取指针

例如,如果要读取一个整数和一个浮点数,格式化字符串可以是 “%d %f”。

使用示例:

#include 

int main() 
{
    int num;
    float value;
	// 一定要先进行初始化
    printf("Enter an integer and a float: ");
    scanf("%d %f", &num, &value);

    printf("You entered: %d and %.2f\n", num, value);

    return 0;
}

上述示例中,scanf(“%d %f”, &num, &value); 会等待用户输入一个整数,然后是一个浮点数,然后将这两个值存储到相应的变量 num 和 value 中。

运行代码会出现这样的界面:

scanf()函数基本介绍_第1张图片
在界面上输入整数24 和浮点数1.23
scanf()函数基本介绍_第2张图片
输入两个数的时候,中间用空格作为间隔即可。
代码运行结果:

Enter an integer and a float: 24 1.23
You entered: 24 and 1.23

注意事项:

一定使用 & 操作符获取变量的地址,以确保 scanf() 将输入的值存储到正确的位置。
对于字符串的输入,最好使用 %s,但要确保足够的缓冲区大小以防止溢出。
总体而言,scanf() 函数为C语言提供了一种灵活的输入机制,但需要小心处理格式化字符串以及错误处理,以确保输入的正确性。

四 scanf() 的读取过程

具体过程如下:

1 格式字符串解析: scanf() 根据提供的格式字符串(如%d %f)进行解析,确定每个转换说明符的类型和位置。

2 输入流读取:操作系统在接收键盘数据时都将它当成字符来接收的。 所以scanf() 从输入流(通常是键盘输入,即标准输入)中读取字符。(也就是我们在键盘里输入的所有东西,包括空格。如上面例子中输入的“24 1.23”)

3 空白字符跳过: 在读取每个转换说明符之前,scanf() 跳过输入中的空白字符(例如空格、制表符、换行符等)。
如果输入流中包含空白字符,这些空白字符可能会干扰对其他数据的正确读取。通过在输入之前跳过空白字符,可以确保从用户输入中提取有效数据,而不受不必要的空格或其他空白字符的影响。

4 转换: 根据格式字符串中的转换说明符,scanf() 将输入的字符转换为相应的数据类型,并将其存储到指定的变量中。

5 匹配格式说明符: scanf() 会尝试匹配输入与格式说明符中的要求,确保输入的数据与指定的格式相符合。

6 变量赋值: 读取并成功转换一个数据项后,scanf() 将其存储到相应的变量中。

7 迭代处理格式说明符: scanf() 继续迭代处理格式字符串中的下一个转换说明符,直到整个格式字符串被处理完毕。

8 返回值: scanf() 的返回值为成功读取并转换的数据项的数量,或者在发生错误时返回负值。

 scanf("%d %f", &num, &value); 

这条语句中,scanf() 函数使用格式说明符 %d 和 %f 来指定两个不同类型的变量。scanf() 会按照给定的格式从输入中读取数据,并根据格式的要求将数据存储到相应的变量中。

下面是该语句的工作流程:

1 scanf(“%d %f”, &num, &value); 中的 %d 表示要读取一个整数,而 %f 表示要读取一个浮点数。

2 当 scanf() 开始执行时,它会从输入流(通常是标准输入)中读取字符,直到遇到非空白字符。然后,它会按照格式说明符 %d 期望的格式读取整数,并将其存储到 num 变量中。

3 在读取整数后,scanf() 会继续扫描输入,直到遇到下一个非空白字符。然后,它按照格式说明符 %f 期望的格式读取浮点数,并将其存储到 value 变量中。

4 一旦 scanf() 成功地读取并存储了一个变量的值,它会认为该变量的存取已完成,然后继续扫描输入以获取下一个变量的值。

5 注意,空白字符(例如空格、制表符、换行符等)用于分隔不同的数据项。在这个例子中,空格字符用于分隔整数和浮点数。

6 如果输入的格式与指定的格式说明符不匹配,或者输入中包含无法转换的字符,scanf() 可能会返回错误或者产生不确定的行为。

总体而言,scanf() 根据格式说明符和输入流的内容来判断一个变量的存取是否完成,并在成功读取一个变量后继续扫描输入以获取下一个变量的值。

你可能感兴趣的:(c,语言,c语言,开发语言)