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
三,说明
- 控制字符LF,英文全称line feed,意思是换行,ASCII值为10
- 文章中的代码下载
版权声明:本文为zhouzying原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。