C++ Cin判断输入结束

cin可以用来从键盘输入数据;将标准输入定向为文件后,cin也可以用来从文件中读入数据。在输入数据的多少不确定,且没有结束标志的情况下。若是从文件中读取数据,到达文件末尾就读取结束了。从控制台读取数据时,可以通过输入特殊的控制字符:

在window系统中,通过键盘输入时,按Ctrl+Z组合键后再按回车键,就代表输入结束。

在UNIX/Linux/Mac OS系统中,Ctrl+D代表输入结束。

cin判断控制台(键盘)读取结束

#include <iostream>
using namespace std;
int main()
{
    int n;
    int maxN = 0;
    while (cin >> n){  //输入没有结束,cin 就返回 true,条件就为真
        if (maxN < n)
            maxN = n;
    }
    cout << maxN <<endl;
    return 0;
}

当我们输入一串数据,按下Ctrl+Z组合键时,表示输入结束。

Cin判断文件读取结束

如果将标准输入重定向为某个文件,如在程序开始添加freopen("test.txt","r",stdin);语句,或者不添加上述语句,但是在Windows的”命令提示符“窗口中输入:

mycin<test.txt//假设编译生成的可执行文件的名字为mycin.exe

则都能使得本程序不再从键盘输入数据,而是从test.txt文件输入数据(前提是test.txt文件和mycin.exe在同一个文件夹中)。在这种情况下,test.txt文件中并不需要包含Ctrl+Z,只要有用空格或者回车隔开的若干个整数即可。

cin读到文件末尾是,cin>>n就会返回false,从而导致程序结束。

cin.get():C++读取单个字符

get()是istream类的成员函数,它有多种重载形式,其中最常用的一种:

int get();

此函数从输入流中读入一个字符,返回值就是该字符夫人ASCLL码。如果碰到输入的末尾,则返回EOF(End of File的缩写)。istream类中从输入流(包括文件)中读取数据成员函数,在把输入数据都读取完后再进行读取,就会返回EOF。EOF是在iostream类中定义的一个整形常量,值为-1。

get()函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。

#include <iostream>
using namespace std;
int main()
{
    int c;
    while ((c = cin.get()) != EOF)
        cout.put(c);
    return 0;
}

程序中的变量c应为Int类型,而不能是char类型。在输入流中碰到ASCII码等于0xFF的字符串时,cin.get()返回0xFF,0xFF赋值给c,此时如果c是char类型的,那么其值就是-1(因为符号位1代表负数),即等于EOF,于是程序就错误地认为输入已经结束。

要将文本test.txt中的全部内容原样显示出来,程序可以如下编写:

#include <iostream>
using namespace std;
int main()
{
    int c;
    freopen("test.txt", "r", stdin);  //将标准输入重定向为 test.txt
    while ((c = cin.get()) != EOF)
        cout.put(c);
    return 0;
}

本文内容来自http://c.biancheng.net/view/278.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Estelle_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值