前言
在我们刷题过程中总是会碰上多组输入这种问题,看别人的答案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的三种写法了,如有不足还请大佬多多指点。