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

  • Post author:
  • Post category:其他

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

 


版权声明:本文为zhouzying原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。