我们在做C语言题目的时候,老是遇到一些奇葩的要求,例如输入的时候要多组输入,或者不告诉你多少组,等等等,下面我总结了一些模板,不完全套路。
- 多组输入(简单的)
1.已知组数n
for(i=0;i<n;i++){
}
或者
while(n--){
}
2.未知组数
while(scanf("%d%d",&a,&b)!=EOF){
}//计算多组a+b的时候未知组数
或者
while(~scanf("%d%d",&a,&b)){
}
- 接下来我们来看看字符的操作,有一点点复杂
1.已知字符数目的输入
int main(){
int i;
char ch1;
int max=5;
for(i=0;i<max;i++){
ch1=getchar();
getchar();//吸收换行符,为了在下一次输入之前把缓冲区的换行吸收掉
printf("%c\t",ch1);
}
return 0;
}
看一下结果
2.未知字符数目的输入
只需要把上面的for循环改一下,改成while
while(ch1!='\n'){
ch1=getchar();
getchar();//吸收换行符
printf("%c\t",ch1);
}
结果是
因为字符录入的时候我们按了回车,实际上也就是把回车也录入 了,所以最后结束的标志是回车,记住这个就ok了。
- 将一串未知数字存入数组,使用的也是上面的方法类似
int main()
{
int a[100000];//数组尽量开大一点。
char c;
int i=0;
int n=0;
while((c=getchar())!='\n')
{
if(isdigit(c))//判断字符是否为字符型数字,是返回1,否返回0
{
ungetc(c,stdin);//将c送回输入流,相当于栈,先入后出。
scanf("%d",&a[n++]);
}
}
for(i=0;i<n;i++)
{
printf("%d",a[i]);
}
return 0;
}
在这里,我们出现了几个不同寻常的地方,注释有,好好理解就好。这里将一串数字转换成了字符数组的样式。
C 库函数 int ungetc(int char, FILE *stream) 把字符 char(一个无符号字符)推入到指定的流 stream 中,以便它是下一个被读取到的字符
------菜鸟教程
ok,如果有错误,欢迎指正,谢谢各位大佬。