cin和scanf判断读取输入结束

本文详细介绍了如何在C++中处理字符输入并按ASCII码排序,包括使用scanf和cin读取多组数据直到文件结束或输入EOF。文章对比了两种输入方式的特点,如空格和回车的处理,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qwe
asd
zxc
 
Sample Output
e q w
a d s
c x z

 

像上面的题目,输入包含多组数据但不确定为具体数值时,我们需要判断输入是否结束从而判断程序是否继续执行;
当使用scanf读取输入时,当输入文件结束时函数会返回EOF,EOF的值为-1;需要注意的是读取字符时,会把空格和回车都作为输入读取;
#include<iostream>
#include<vector>
#include<memory.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main(){
    char a,b,c,t;
    while(scanf("%c%c%c",&a,&b,&c)!=EOF){//这样数值之间不可以输入空格,应为空格也会被读取
                         //如果需要中间输入空格的话,可以scanf("%c %c %c",&a,&b,&c);
  getchar();//因为scanf会读取回车,所以通过getchar()把回车吸收掉
if(b<=c&&b<=a){ t=a; a=b; b=t; } else if(c<=a&&c<=b){ t=a; a=c; c=t; } if(c<b){ t=b; b=c; c=t; } cout<<a<<' '<<b<<' '<<c<<endl; } return 0; }

当使用cin输入时,可以直接while(cin>>a>>b>>c),因为主要没有读取结束标志,(cin>>a>>b>>c)就会返回true;当读取结束标志则返回false;
另外cin不会读取空格和回车;

#include<iostream>
#include<vector>
#include<memory.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main(){
    char a,b,c,t;
    while(cin>>a>>b>>c){
    if(b<=c&&b<=a){
        t=a;
        a=b;
        b=t;
    }
    else if(c<=a&&c<=b){
        t=a;
        a=c;
        c=t;
    }
    if(c<b){
        t=b;
        b=c;
        c=t;
    }
    cout<<a<<' '<<b<<' '<<c<<endl;
    }
    return 0;
}

在windows上输入EOF的方法为Ctrl+Z

其它平台上输入EOF的方法为Ctrl+D

转载于:https://www.cnblogs.com/zdl2234/p/10320359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值