|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在小甲鱼的这段代码里
- void write_matrix(int *ptr)
- {
- int m = ptr[0];
- int n = ptr[1];
- int *matrix = ptr + 2;
- int num, x, y;
- if (ptr == NULL)
- {
- printf("未检测到矩阵,请先生成矩阵!\n");
- return ;
- }
- printf("请输入要修改的位置(行,列)-> ");
- scanf("%d,%d", &x, &y);
- if (x > m || y > n || x < 1 || y < 1)
- {
- printf("坐标输入有误!\n");
- return ;
- }
- printf("请输入一个数字:");
- scanf("%d", &num);
- matrix[(x - 1) * n + (y - 1)] = num;
- }
复制代码
在这段代码中的
- scanf("%d,%d", &x, &y);
- if (x > m || y > n || x < 1 || y < 1)
- {
- printf("坐标输入有误!\n");
- return ;
- }
- printf("请输入一个数字:");
- scanf("%d", &num);
复制代码
这一部分
为什么它在使用scanf后可以不用getchar()清空缓冲区的\n就可以再次使用scanf啊?
在我的理解中在使用scanf之后不是都会在缓冲区里遗留一个换行符的吗?
本帖最后由 jackz007 于 2022-4-29 19:00 编辑
在使用完 scanf() 函数后,键盘缓冲区内确实会遗留一个 '\n',但是,这个 '\n' 会被后续的 scanf() 视为一个空白分隔符,因而,并不会影响后续 scanf() 的运行结果。
如果调用 scanf() 函数后,在键盘缓冲区内还有遗留的 ’\n’ 的时候,继续调用 getchar()、gets()、fgets( , , stdin) 等函数时,这个被遗留的 ’\n’ 字符会成为这些函数的一次输入,而这并非我们预期的效果,所以,为了消除这个不利影响,才会需要清空键盘缓冲区,当然,使用 getchar() 是一种方法,但是,不是专业的方法,因为,C 语言有一个标准库函数 fflush() 可以专门解决此问题:
楼主不妨一试。
|
|