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

C 专栏收录该内容
3 篇文章 0 订阅

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. 文章中的代码下载

 

  • 7
    点赞
  • 0
    评论
  • 22
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏

Jasonzhiying

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值