本文目录

  • scanf
  • cin
  • 总结

scanf

scanf是一个函数,它的返回值是一个int,该int代表scanf成功读取到数据的个数如果读到文件末尾或者输入ctrl+z标志读取完毕的时候就会读到EOF,这是它会返回0,相当于false;

int n;while (scanf("%d", &n) != EOF){getchar();//吃掉回车cout<<n<<endl;}

cin

首先 cin是一个ios(iostream)中的对象,那么他不是函数,不存在什么返回值;

int n;while (cin>>n){cout << "flag" << endl;}

这段程序看起来好像cin返回了值作为while中的条件判断,实际上cin是一个对象,无返回值,而这个返回值是std中重载>>这个运算符返回的,其类型是一个istream&,这也说明了可以cin>>a>>b这样连用的场景;

那么既然返回值是一个istream&类型,那么这个类型的对象怎么作为条件逻辑判断的呢?

istream作为ios继承的一个类型,其中重载了bool这个操作符别名,使得istream其对象可以调用bool操作符(相当于加了一个本类型与bool类型的转换函数),该函数选择性的返回给条件判断语句true或者false,比如istream的对象 如果收到EOF(ctrl+z)就会return false,这也说明了while(cin>>n)当传入EOF能停下来的原因;

则下面两段代码等价:

int n;while (cin>>n){cout << "flag" << endl;}int n;while ((cin>>n).bool()){cout << "flag" << endl;}

如果某个类型没有重载bool操作符,那么它就不能用于条件逻辑判断;

class A
{public:int a = 0;
};
int main() {A a;if (a) cout << 1 << endl;else cout << 0 << endl;return 0;
}

添加重载bool操作符;

class A
{public:int a = 0;operator bool()//注意 转换函数比较特殊 无返回值{if(a==0) return false;return true;}
};
int main() {A a;if (a) cout << 1 << endl;else cout << 0 << endl;return 0;
}

要注意的是 这里operator bool()相当于是一个原生类型与bool类型的转换函数会返回一个bool值给逻辑表达式作为判断但是重载operator bool()的时候无返回值!这是其特殊的地方!

因此,若想使用自定义类型作为逻辑判断表达式的判断依据只要在这个类型中设置转换函数即重载operator bool()即可;

总结

1**.scanf是一个函数**,返回值为一个int,代表scanf读入对象的个数,如果其读到EOF结束标志,会返回0相当于false;
2.cin是一个istream类型对象,他能作为判断语句的原因是istream类型中的>>操作符会返回一个istream对象(cin)如果>>读到EOF那么返回的istream对象(cin)中会检测到EOF的存在那么istream类型的operator bool()转换函数起作用将这个对象(cin)转换成bool类型false作为条件判断

scanf和cin的返回值问题相关推荐

  1. 函数的谓词是什么? cin的返回值是什么?

    1.函数谓词 所谓函数谓词,即标准库算法传递的参数, 可以指定算法的操作, 如std::sort, 默认是从小到大, 通过谓词可以修改从大到小.包含基本的5种谓词模式: 函数,函数指针,lambda表 ...

  2. 关于使用cin的返回值终止循环输入

    while(符合某状态){xxx}.可以直接while(cin>>a>>b) . (关于cin>>xx,正常情况下其返回值为cin本身(非0值),当遇到EOF输入时 ...

  3. c语言scanf返回值被忽略,scanf返回值问题

    在家养病,闲着没事看C primer plus,看到书中对于scanf输入的判断,常用如下方法: 此时它将返回1视为我输入成功,如果不为1则视为输入失败.那到底scanf的返回值具体指的是什么呢? 例 ...

  4. C语言scanf()返回值以及EOF

    做acm练习题时偶然发现一个奇特的现象: while(scanf("%d %d", &a, &b) != EOF)与 while(scanf("%d %d ...

  5. c语言scanf返回值

    c语言scanf返回值 1. scanf 函数是有返回值的,它的返回值可以分成三种情况   1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", & ...

  6. c语言scanf返回值错误,c语言scanf返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); 如果 ...

  7. scanf 函数的返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数. 例如执行 scanf("%d %d", &a, &b); 如 ...

  8. scanf函数的返回值是什么?

    scanf函数的返回值与正确输入数据的个数有关,当输入有错误时,错误输入之前正确输入数据的个数即为scanf的返回值.简而言之,scanf返回值等于读取到正确数据的个数. 初学者可能会问:scanf函 ...

  9. C语言scanf返回值怎么写,C语言 scanf 返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); 如果 ...

最新文章

  1. Smark.Data 值转换器
  2. 互联网1分钟 |1228
  3. Linux比较大文件内容,Linux系统最大文件打开数优化,解决Too many open files报错
  4. mvc html.radiobutton 选中,asp.net-mvc - 如何使用RadioButtonFor选择单选按钮中的任何一个并包含if else语句 - 堆栈内存溢出...
  5. 3. vi 简介(3)
  6. C# .NET 如何修改代码字体
  7. 【渝粤教育】广东开放大学 中国文化与中国文学 形成性考核 (46)
  8. Unity3D在C盘的缓存文件
  9. win10便签常驻桌面_做备忘录,用win10自带的便笺工具就可以了,免费又方便
  10. 用c语言实现图书信息管理系统
  11. pythonsort参数_Python sort()函数有哪些参数?
  12. 300多个地级市GDP及第一、二、三产业占比数据(1990-2021年)
  13. 微信小程序轮播图、焦点图-swiper
  14. 法律人如何使用python_执业10年,我见过太多法律人掉进这个大坑!
  15. 语言代码与国家地区对照表(表格)
  16. 大促系统全流量压测及稳定性保证——京东交易架构分享(含PPT)
  17. 发票OFD格式打开方式
  18. 被 Oracle 裁员的程序员们,现在怎么样了?
  19. set but not used 警告
  20. Aigtek—浅谈线束测试仪的重要性

热门文章

  1. 关于python中的+、+=、*、*=
  2. java全栈系列之JavaSE--JDK的安装以及环境搭建001
  3. ROS基础(四)——话题消息的定义与使用
  4. laradock配置laravel 报错 Connection refused tcp://127.0.0.1:6379
  5. 出现Artifact xxx:war exploded: Error during artifact deployment. See server log for details.的问题(已经解决)
  6. 学习笔记0601----mysql主从
  7. 全球与中国激光光导鼓市场深度分析及发展研究预测报告
  8. 安卓 自定义吐司样式 ,适配Android Pie
  9. c语言case套case,switch…case
  10. 干货!使用Geotools解析shap数据实例