使用gets函数循环时无法读取第一行问题

文章讲述了在C语言中使用gets函数获取多个字符串时遇到的问题,即换行符残留导致的错误。作者提供了四种方法来清除输入缓冲区中的换行符,包括fflush、scanf配合%*c、getchar与while循环以及rewind函数。
摘要由CSDN通过智能技术生成

        在书写输入多个字符串时,我使用了gets函数与循环的形式,但是发现若我想要输入n个字符串但是每次都只有n-1个字符串输入成功,如下代码,我希望输入多个字符串最后输出第一个字符串。

#include <stdio.h>
#include <string.h>

int main() {
	char arr[10][100];
	int row;
	printf("您要比较多少个字符串:");
	scanf("%d", &row);
	printf("\n");
	char(*parr)[100] = arr;
	int i;
	printf("请输入字符串:\n");
	for (i = 0; i < row; i++) {
		gets(*(parr + i));
	}
	printf("第一行字符为:%s\n", parr);
}

最后输出结果如下:

最终实际上输出了一个换行符。

        最后发现应该是前面的scanf函数的问题,scanf会在读取到换行符时进行输入,但不会清空缓存区,所以最后还有一个换行符在缓存区中,则当i=0时gets函数将换行符看作了字符串进行输入了。

为解决缓冲区中剩余的换行符目前搜到有四种方法:

(1)使用fflush函数:即在下一次输入前加入一行

fflush(stdin); 

用于清空缓冲区,但这个方法在vs2015之后的版本似乎不起作用

(2)使用scanf除去特定的符号:同上,加入

scanf("%*c");

会清除掉缓冲区中的换行符

(3)使用getchar与while:同上,加入

while((c=getchar()) != '\n');

此方法会完全清空缓冲区(getchar一直读取直到将换行符读取掉后结束)

(4)使用rewind函数,rewind会使指定流的读写指针重新指向开头(不懂,后面再查),同上,加入

rewind(stdin);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值