scanf函数与getchar函数区别

简介: scanf函数与getchar函数区别

1. scanf函数

scanf函数是基本的输入函数。基本格式为(int scanf( const char *format [,argument]…)

返回值为int类型,代表读取到几个数值。当读取失败时返回EOF。

其基本的用法:

一:输入一个整型变量scanf(“%d”,&a)

其中%d是整型输入控制符,&a表示变量a地址,&是取地址符。功能:读取键盘输入的整型字符,将整形字符读取到变量a所在地址

二:输入两个整型变量scanf(“%d%d”,&a,&b),一个%d对应一个整型变量。

注意:scanf在接受多个变量时,每个变量之间要用空格,回车,或者TAB键,分隔开(可连续按多次,但一般只输入一次)。也就是scanf读取到空格,回车,或者TAB键时,自动停止,并准备读取下一个变量

在全部输入完成后,按回车终止!

2.getchar函数

getchar函数是字符读取函数,每次只读取一个字符!基本格式为 int getchar( void );

返回值为接收字符的ASCII码值。

作用:从缓冲区中读取一个字符,成功时返回这个字符的ASCII码值,失败时返回EOF。注:用户输入完数据时,会按回车键代表输入完成,但是回车键也会被存入缓冲区,输入字符’A’加空格输入完成

只要缓冲区中有数据,getchar()就会自动读取缓冲区中第一个字符,并且下次自动读取下一个字符,无需用户再次输入。

如下图代码 ,输入字符’A’并且回车确认。

#include<stdio.h>
int main()
{
  int ch = 0;
  int i = 0;
  while (i<2)
  {
    i++;
    ch = getchar();
    putchar(ch);
  }
  return 0;
}

如图所示,i=1时,打印字符’A’;i=2时,打印’\n’ 。

当循环次数改成 while(i<4)时,输入"abcde",打印"abcd"。

由此可见,只要缓冲区内有内容,getchar()就会自动读取,并且读取完之后,接着再读取下一个内容,直到缓冲区为空!

3. 应用实例

请分析下面代码:

int main()
{
  char password[20];
  printf("请输入密码:>");
  scanf("%s", &password);
  printf("请确认密码(Y/N):\n");
  int ch = getchar();  //ch接收Y、N
  if (ch == 'Y')
    printf("输入正确!\n");
  else
    printf("输入错误!\n");
  return 0;
}

输入abcd结果直接为:输入错误

这是因为,当我们输入abcd后,需要按回车键确认,然而scanf取的是回车前面的数据,而’\n’被留在了缓冲区。当运行到getchar()自动读取’\n’,因此打印输入错误

而如何避免这个情况呢?我们必须提前把缓冲区清空,在运行ch = getchar()语句。

int main()
{
  char password[20];
  printf("请输入密码:>");
  scanf("%s", &password);
  printf("请确认密码(Y/N):");
  getchar();       //清空缓冲区
  int ch = getchar();  //ch接收Y、N
  if (ch == 'Y')
    printf("输入正确!\n");
  else
    printf("输入错误!\n");
  return 0;
}

运行成功!

我们在判断之前在加一个getchar()函数,提前将缓冲区中的\n取走,就可达到我们想要的目的,这样的方法叫做清理缓冲区。

而且我们可以用while()循环,来清理缓冲区的多个字符。

int tem = 0;
  while ((tem = getchar()) != '\0');//清空缓冲区的字符串
  while ((tem = getchar()) != '\n');//清空缓冲区回车以前的字符

以上是本人对scanf与getchar的理解,后续会继续深入学习,希望各位大神指点!💖

目录
相关文章
|
8月前
|
C语言
你真的学会了printf和scanf函数吗?
你真的学会了printf和scanf函数吗?
|
8月前
|
编译器 C语言 C++
scanf函数
该文介绍了C语言中`scanf`函数用于输入变量值,而`printf`函数用于输出变量值。`scanf`在读取数值时会自动过滤空白字符,允许数据间有空格或换行,不影响解析。`scanf`返回值表示成功读取的变量数,0表示未读取或匹配失败,EOF表示读取错误或文件结尾。常见占位符包括 `%c`(字符)、`%d`(整数)、`%f`(浮点数)、`%s`(字符串)和`%[]`(指定字符集)。对于`%c`,不会忽略空白字符,但可加空格跳过前导空白。文章还提及在VS2022中,`scanf`被认为是不安全的,推荐使用`scanf_s`,并提供了如何在VS中使用`scanf`的解决方法。
156 1
|
7月前
putchar()函数
【6月更文挑战第24天】putchar()函数。
166 2
scanf和getchar区别
scanf和getchar区别
305 0
c中scanf函数注意点
c中scanf函数注意点
94 0
|
缓存
scanf和printf函数
scanf和printf函数
168 0
|
C语言
printf与scanf函数的返回值
printf与scanf函数的返回值
|
编译器 C语言 C++
关于vs中scanf()函数报错问题的解决
关于vs中scanf()函数报错问题的解决
130 0
|
C语言 数据安全/隐私保护
【C语言】getchar与scanf输入函数注意事项
【C语言】getchar与scanf输入函数注意事项
119 0
|
IDE 编译器 开发工具
VS 调用 scanf 的正确姿势
VS 调用 scanf 的正确姿势
402 0
VS 调用 scanf 的正确姿势

热门文章

最新文章