黑盒测试中结束条件的判断

while(scanf() != EOF)和 while(cin>>n)
1.scanf 是 C 语言中的,它是有返回值的,其返回值是被输入函数成功赋值的变量个数,例如 scanf("%d %d",&x,&y) ;它的返回值为2 。

对于while(scanf() != EOF),条件为真它可以一直执行下去,一直到文件结束scanf() 的返回值变为EOF(定义的一个常量,一般值为-1)。如果希望手动结束可以用Ctrl+Z组合键来触发结束条件。

对于缓冲区中输入的值,scanf会自动检查是否有结束标志,一般来说有两种检查方式:阻塞式以及非阻塞式。scanf应用的是阻塞式检查
阻塞式的方式有一个特点:只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下。

2.对于while(cin>>n)来说,cin是C++的输入流对象,">>"是重载的运算符,cin>>的返回值是cin对象。

int main()
{
    int len=1;
    char a[3];
    while (cin>>a || cin>> len)
    {
        cout<<a<<endl;
        cout<<len<<endl;
    }
    return 0;
}

输入you 和 222 时,结果如下:
在这里插入图片描述
这个结果为什么是这样,它是如何得到的呢?其实是这样的:当我们输入qq和0时,其中间是用空格隔开的,这样cin>>qq之后返回cin对象再对0进行读取,后面的cin>>len并没有执行。所以while循环将会执行两次,一次是a[] = “qq”,另一次是a[] = “0”;这样才会出现以上的结果。

如果将while (cin >> a || cin >> len)改成while (cin >> a >> len),执行结果如下:
在这里插入图片描述
下面对cin再做一下介绍,当我们从键盘输入一串字符

输入(cin)缓冲是行缓冲。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin 就会检测输入缓冲区中是否有了可读的数据,这种情况下cin对键盘上是否有作为流结束标志CTRL+Z,其检查的方式为阻塞式。

转自https://www.cnblogs.com/tgycoder/p/4958519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值