Bootstrap

c语言不知道数据个数时怎么进行输入(附解析)

在我们平常练习的题目中,有些题目不告诉你输入几个元素,这时该怎么进行输入呢。

如果我们这时用一个关于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之间,并且这样输入也顺便跳过了了结尾的换行符,方便下一次输入。

;