【发布时间】:2021-07-26 13:08:16
【问题描述】:
我正在尝试从键盘读取一些字符串并将它们保存到数组中。我指定了要读取的最大字符数并在中间首字母之后清除缓冲区以丢弃所有字符并超出限制。一旦我输入超过最大字符,一切似乎都很好。但是如果我输入的值小于最大值怎么办?我得到和额外的空行。似乎程序正在等待输入,我不知道为什么。有人能解释一下我知识的阴影吗?
这是我的代码 sn-p
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char name[35];
char middlename[7];
char lastname[35];
printf("Please enter name: ");
scanf("%34[^\n]%*c", name);
printf("Please enter middle name: ");
scanf("%6[^\n]%*c", middlename);
while (getchar() != '\n');
printf("Please enter last name: ");
scanf("%34[^\n]%*c", lastname);
}
这是我的输出:
Please enter name: Antony
Please enter middle name: Jr.
_ // here it waits for input
【问题讨论】:
-
代码中
while (getchar() != '\n');的作用是什么? -
@ThomasJager 如果我不清除缓冲区并输入超过 6 个字符,则会显示不正确的输出跳过姓氏部分
-
删除第二个 %*c 说明符并永远忘记它。在每次后续输入之前,使用 -while (getchar ()! = '\n' ); 清除缓冲区。