C语言中处理一行输入未知个数的整数的问题

C编程习题中经常会遇到一行输入未知个数的整数的问题,今天我就来分享一下类问题如何解决。

一,问题重现

例如,输入:

1 2 3 4 6 7......

具体输入的个数不清楚,只限定不超过N,N这里我们随便取个值为100。

如果只是常规地用scanf()输入一个个整数,这里是肯定不行,因为整数的个数不清楚。

二,解决问题

如何解决呢?首先我得分析一下,从终端输入的都是什么东西,我们把输入的字符拆开来看,

int int ......intLF

两个整数之间有个空格字符,最后一个整数后面是一个换行符(LF),C语言规定每行输入都有零个或多个字符在加上一个结束的换行符(LF),line feed的ASCII值为10。

于是我们便可以通过判断最后一个字符输入是否是LF来判断输入是否结束。定义一个input函数来处理输入:

void input(int *a,int *len){

    int cnt=0;
    int n=1;
    char ch;

    do{
        scanf("%d%c",a,&ch);
        a++;
        cnt++;
    }while((int)ch != 10); //  The last character is line feed whose ascii value is 10

    *len = cnt;  
}

len所指的内容是输入的整数的个数,通过指针带回。这个函数可以处理任何任意个被任何字符相隔的整数的输入问题,整数既可以被空格分隔,也可以被逗号,或者其他字符。下面看一下效果:

1 2 3 4
1
2
3
4

三,说明

  1. 控制字符LF,英文全称line feed,意思是换行,ASCII值为10
  2. 文章中的代码下载

 

  • 31
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值