多组输入中scanf的三种写法

简介: 多组输入中scanf的三种写法

前言


在我们刷题过程中总是会碰上多组输入这种问题,看别人的答案while循环后的scanf写法总是有所差异,这几种写法有啥区别呢?今天就带大家来学习探讨这个问题。


简单认识scanf的作用


1.scanf读取数据,如果读到了数据,返回的是实际读到的数据的个数。

2.如果没有读到数据,说明读取失败,返回的是EOF(-1)。


例如:


#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  int ret = scanf("%d %d", &a, &b);  //%d与%d之间的空格有没有都没有关系,不影响数据读取
  printf("ret = %d\n", ret);
  return 0;
}


输入a,b后,打印 ret = 2


写法一


int main()
{
  int a = 0;
  int b = 0;
  while (scanf("%d %d", &a, &b) == 2)
  {
        //根据读取到的数据个数来判断是否循环
  }
  return 0;
}


写法二


int main()
{
  int a = 0;
  int b = 0;
  while (scanf("%d %d", &a, &b) != EOF)
  {
  //读取到2个数字,scanf返回的是2
  //读取到1个数字,scanf返回的是1
  //没读取到数字返回EOF(-1)
  }
  return 0;
}


写法三


int main()
{
  int a = 0;
  int b = 0;
  while (~scanf("%d %d", &a, &b))
  {
  //scanf读取失败的时候返回的是EOF,也就是-1
  //-1的补码是
  //11111111111111111111111111111111
  //当对scanf的返回值~(按位取反的时候)得到的是0
  }
  return 0;
}


以上便是我见到的scanf的三种写法了,如有不足还请大佬多多指点。


相关文章
请编fun函数写程序,从键盘输入百分制成绩,要求输出等级制成绩A、B、C、D。90~100分为A,80~89分为B,60~79分为C,1~59分为D。不考虑小数,输入为整数
请编fun函数写程序,从键盘输入百分制成绩,要求输出等级制成绩A、B、C、D。90~100分为A,80~89分为B,60~79分为C,1~59分为D。不考虑小数,输入为整数
487 0
|
5月前
格式化输入──scanf()函数
【6月更文挑战第24天】格式化输入──scanf()函数。
110 5
|
6月前
|
存储 安全 C语言
C语言程序设计——格式输入函数scanf()
C语言程序设计——格式输入函数scanf()
|
6月前
|
存储 C语言
用scanf函数输入数据
用scanf函数输入数据
65 1
|
编译器 C语言 C++
scanf的多组输入及两种输入方法你还不会嘛?看完这篇文章让你彻底认识scanf!
scanf的多组输入及两种输入方法你还不会嘛?看完这篇文章让你彻底认识scanf!
333 0
|
6月前
|
存储 程序员 C++
C++系列-第1章顺序结构-5-输入类cin
C++系列-第1章顺序结构-5-输入类cin
|
12月前
|
C语言
多组输入的两种写法(C语言)
多组输入的两种写法(C语言)
252 0
|
C语言
C语言:多组输入和getchar函数(1)
C语言:多组输入和getchar函数
|
C语言
C语言:多组输入和getchar函数(2)
C语言:多组输入和getchar函数
|
编译器 C语言 C++
C语言--多组输入类题目
C语言--多组输入类题目
56 0