1 前言

输入输出挺重要,同时可以选择的方式也很多,而本文主要指出在输入输出的时候你可能遇到的一些问题,提供一些解决的方法,并补充你可能不知道的点。另外这里的输入输出主要为从键盘输入,向屏幕输出

强烈建议大家先看一下这篇文章,关于几种输入方式的区别,看完之后可能就不用看这里了(笑)

2 实例

一般来说,关于输入的问题比较集中在输入遇到“空格”、“换行”,“如何结束”等

2.1 cin 方式

头文件 <iostream>,主要包括以下三种方式

  • cin >>
  • cin.get()
  • cin.getline()

cin >>

这种输入方式最大的问题就是遇到 [space] [Tab] [enter] 之后会结束,所以如果遇到要输入这些字符的情况时,不建议大家采用 cin >>,而是后面的几种办法

cin 判断输入结束

做 OJ 题目,时常碰到不定数量的输入数据。而在输入数据的多少不确定,且没有结束标志的情况下,该如何判断输入数据已经读完了呢?看下面的例子

int n;
while(cin >> n) {//do something
}
// do something
// return answer

cin 在正常读取时返回 true,遇到结束标志时返回 false,我们可以根据 cin 的返回值来判断是否读取结束

而我们在控制台中输入特殊的控制字符就表示输入结束了

  • Windows,通过键盘输入时,按 Ctrl+Z 组合键后再按回车键,就代表输入结束
  • UNIX/Linux/Mac OS,Ctrl+D 代表输入结束。

如果 cin 在读取过程中发生了错误,cin >> n 这样的表达式也会返回 false,例如刚刚的例子,如果输入的不是数字而是字母,就算出错

cin.get()

cin.get() 这种方式有很多重载,这里举几个常用方法

// 1. int get(),此法最好用 int
int c;
while((c = cin.get()) != EOF) {cout.put(c);
}// 2. istream& get (char& c);
char c;
cin.get(c);// 3. istream& get (char* s, streamsize n, char delim);
// 这里最后一个参数为终止符,不填默认为换行符 '\n'
// 这个方法读到“终止符”后,将换行符之前的字符自动加上'\0'作为 c-string
// 与 getline 不同,终止符不会被提取,会被保存在流中下一次被读取
char str[256];
cin.get(str, 256, '\n'); //等价于 cin.get(str,256);

cin.getline()

cin.getline() 与前面提到的 cin.get() 第3个重载类似,但是终止符会从流中提取出来丢弃掉

// istream& getline (char* s, streamsize n, char delim );
// A null character ('\0') is automatically appended to the written sequence if ...
// n is greater than zero, even if an empty string is extracted.
char str[256];
cin.getline(str, 256, '\n');

2.2 getline 方式

头文件 <string>

比较适合输入一串包含空格等未知长度的字符串,且使用 string 类型

// istream& getline (istream& is, string& str, char delim);
// 注意第二个参数接受的是 string 类型
// 最后一个参数为终止符,默认为 '\n',终止符会从流中提取出来并丢弃
string buf;
getline(cin, buf, '\n'); //等价于 gelin(cin, str);

3 参考资料

[1] C++输入输出流 http://c.biancheng.net/cplus/50/

[2] cin、cin.get()、cin.getline()、getline()的区别 https://blog.csdn.net/a3192048/article/details/80303547

【C++】输入的几种方式相关推荐

  1. android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

    前段时间项目中有个需求是要求只能输入汉字,并且不能输入偏旁部首,于是总结了下EditText限制输入的几种方式,但是对于语音输入的还没找到好的解决方案: 通过设置EditText的inputType来 ...

  2. c语言关于数组输入的两种方式

    今天上课的时候老师有讲到数组输入有两种方式,一种是直接赋值输入进数组,第二种是利用地址赋给数组,下面是代码: 第一种:直接输入 void model(int *p)//(int p[]){for(i= ...

  3. input框不能输入的几种方式

    效果: 1: readonly规定输入字段为只读可复制,但是,用户可以使用Tab键切换到该字段,可选择,可以接收焦点,还可以选中或拷贝其文本. <input type="text&qu ...

  4. java中获取输入的几种方式

    //方法一 package com.hehe.domain;import java.util.Scanner;public class ScannerDemo {public static void ...

  5. Python实现中文输入的两种方式

    方法一: 首先安装pyperclip库:pip install pyperclip import pyperclip pyperclip.copy('规定')#将规定复制到系统剪贴板# pypercl ...

  6. Java键盘输入的几种方式,大爱Scanner

    1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 ...

  7. 【C语言】字符串输入的三种方式

    一.gets() 该函数原型为: # include <stdio.h> char *gets(char *str); gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针 ...

  8. 字符串输入的几种方式

    字符串配套 1,以字符数组输入 #include <iostream> #include <string> const int M = 1e5 + 10; char str[M ...

  9. C语言关于scanf语句输入的三种方式。

    注意:本文使用的编译软件的是vs2010. 1.scanf("%d%d%d",&a,&b,&c) 填写a b c的数值时,中间要有空格号隔开.如下图. -- ...

最新文章

  1. 一位年轻董事长给大学生的18条好建议
  2. c语言程序改错类型,C语言程序改错总结
  3. thinkphp框架细节
  4. ASP.NET MVC3 301永久重定向实现程序
  5. 吴恩达机器学习(第一章)——初识机器学习
  6. 使用 u-boot 烧写内核——韦东山嵌入式Linux学习笔记10
  7. jquery实现二级联动不与数据库交互
  8. word List 22
  9. 无法加载_Microsoft store应用商店无法加载 问题解决
  10. 如何忽略有关本地更改的“ git pull”错误,因为合并会覆盖我的本地更改?
  11. 语言可以编辑系统软件吗_你知道吗?你本来也可以精通多国语言
  12. c/c++ 内存对齐
  13. 合理使用“搜索引擎和工具书”,提升“速度和加速度”
  14. 4G标准LTE FDD与LTE TDD的不同
  15. matlab气体流速,气体流速的测定方法.pdf
  16. The RSpec Book笔记《四》Describing Code with RSpec用RSpec描述代码
  17. C语言实现部标JTT808
  18. 量子纠缠 计算机,计算机科学家利用量子纠缠系统,证实44年前的一个猜想是错误的...
  19. 关于最近争议很大的链动模式详细分析
  20. 刘华:上云还是不上云,这是一个问题

热门文章

  1. UiPath的下载安装与基本使用
  2. Python+谷歌浏览器--电商秒杀器Selenium自动化爬取
  3. Linux下用户的密码
  4. 分布式数据库案例分享:腾讯移动支付平台米大师
  5. 操作系统实验3 页式地址重定位模拟
  6. 申宝策略-指数呈现放量调整走势
  7. linux中集计和集约的区别,粗放型经济与集约型经济的区别是什么?
  8. 【紧急整理】《信息资源管理》信息资源管理的标准与法规,第5章
  9. 云适配陈本峰:多屏时代如何实现智慧政务?
  10. scrapy爬虫实战:安居客深圳二手房