c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言scanf是啥意思

更新时间:2023-09-29

使用scanf函数读取用户输入

scanf是C语言中的标准库函数之一,它的作用是接收标准输入stdin中的数据,并把它们存储到变量中。它通常与printf函数一起使用,从而实现程序的输入输出功能。scanf函数的原型如下:


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

scanf函数以format为格式控制字符串,并可接任意个变量参数。format字符串用于指定输入数据的格式和类型,它包含了控制符%和普通字符。scanf函数在接收输入时,会根据format字符串中的控制符%来进行匹配和转换,最后将转换后的值存储到对应的变量中。下面是一个简单的示例:

示例1: scanf函数基本用法

#include <stdio.h>

int main() {
  int num;
  printf("请输入一个整数:");
  scanf("%d", &num);
  printf("你输入的整数是:%d\n", num);
  return 0;
}

上面的示例中,先通过printf函数输出一条提示信息,然后调用scanf函数读取用户输入的整数,最后通过printf函数将输入的整数输出到控制台。

scanf输入格式控制符

scanf函数支持多种控制符,用于指定输入数据的类型和格式。下面是常用的控制符列表:

控制符 说明
%d 用于读取整数
%f 用于读取浮点数
%c 用于读取字符
%s 用于读取字符串
%x 用于读取16进制整数
%o 用于读取8进制整数

除了上述的常用控制符之外,还有一些符号可以用来修饰控制符,比如:

符号 说明
* 表示跳过该参数,不对其进行转换
[ ] 用于指定允许输入的字符集合
- 用于指定可输入的最小值和最大值之间的范围

下面是几个示例:

示例2: 读取多个输入变量

#include <stdio.h>

int main() {
  int num1, num2;
  printf("请输入两个整数:");
  scanf("%d %d", &num1, &num2);
  printf("你输入的整数是:%d和%d\n", num1, num2);
  return 0;
}

上面的示例中,通过scanf函数读取两个整数,并通过printf函数输出到控制台。

示例3: 读取浮点数

#include <stdio.h>

int main() {
  float pi;
  printf("请输入PI的近似值:");
  scanf("%f", &pi);
  printf("你输入的PI近似值是:%f\n", pi);
  return 0;
}

上面的示例中,通过scanf函数读取一个浮点数,并通过printf函数输出到控制台。

scanf函数的返回值

scanf函数的返回值等于成功匹配转换的个数。如果转换成功,返回值应该等于format字符串中%的个数。如果没有成功匹配任何输入值,则返回0。如果发生读取错误或者读取到文件结尾,返回值小于format字符串中%的个数。

示例4: scanf函数返回值

#include <stdio.h>

int main() {
  int num1, num2;
  printf("请输入两个整数:");
  int count=scanf("%d %d", &num1, &num2);
  printf("成功匹配了%d个整数\n", count);
  return 0;
}

上面的示例中,通过scanf函数读取两个整数,并获取成功匹配的个数,最后通过printf函数输出到控制台。

scanf函数的安全问题

scanf函数在使用时需要注意安全问题,一般来说,最好使用fgets函数替代scanf函数,因为fgets函数可以避免scanf函数的一些不安全问题,比如缓冲区溢出和格式化字符串漏洞。

下面是一个使用fgets函数替代scanf函数的示例:

示例5: 使用fgets函数读取字符串

#include <stdio.h>
#include <string.h>

int main() {
  char buffer[10];
  printf("请输入一个字符串:");
  fgets(buffer, 10, stdin);
  buffer[strcspn(buffer, "\n")]='\0'; // 去掉fgets函数读入的换行符
  printf("你输入的字符串是:%s\n", buffer);
  return 0;
}

上面的示例中,通过fgets函数读取一个字符串,并通过printf函数输出到控制台。

总结

scanf是C语言中的标准库函数之一,它可以接收标准输入stdin中的数据,并把它们存储到变量中。在使用scanf函数时,需要注意格式控制符的使用、返回值的判断以及安全问题。如果需要读取一个字符串,建议使用fgets函数替代scanf函数,以避免一些不安全问题。