在我们平常练习的题目中,有些题目不告诉你输入几个元素,这时该怎么进行输入呢。
如果我们这时用一个关于scanf的循环,那么我们不知道怎么样算结束输入(特殊情况除外)scanf会跳过换行符,这时我们有两个方法。
方法一
我们这里用一个数组来举例
int ch,i=0;
int arr[5];
while ((ch = getchar()) != '\n') {
if (ch == '\n')
continue;
else {
arr[i] = ch - '0';
i++;
}
}
我们进行输入,遇到换行符就表明结束,遇到空格就跳过,但是这样还是有问题,比如我们想输入10,数组会分别存1,0。
所以这个方法可以在输入数据小于10大于0时可以用。
方法二
我们还是拿数组来举例
int ch,i=0;
int a[5] = { 0 };
while (1) {
scanf("%d", &a[i]);
i++;
if ((ch = getchar()) == '\n') {
break;
}
}
这时我们先用scanf输入,因为scanf会跳过空格,所以我们只需要判断当前输入是否为换行符,所以我们在每次scanf输入后都用一次getchar()函数,我们不需要担心getchar()会影响我们的输入,比如我们输入1 2 3,scanf读取1,getchar()读取1和2中间的空格,之后scanf读取2,getchar()还是读取空格,直到最后一个,这时在3后面我们会留下一个换行符,这时getchar()会读取换行符,那就表明输入结束了,直接退出循环。
这种输入方法的好处是不像第一种方法读取数字时只能读取1到10之间,并且这样输入也顺便跳过了了结尾的换行符,方便下一次输入。