gpt4 book ai didi

c - C 中清除缓冲区的问题

转载 作者:行者123 更新时间:2023-12-02 02:05:09 26 4
gpt4 key购买 nike

我正在尝试从键盘读取一些字符串并将它们保存到数组中。我指定了要读取的最大字符数并在中间名缩写后清除缓冲区以丢弃所有字符并超出限制。当我输入的字符数超过最大字符数时,一切似乎都很好。但如果我输入的内容少于最大值怎么办?我得到了额外的空行。似乎程序正在等待输入,我不知道为什么。有人可以阐明我的知识阴影吗?

这是我的代码片段

#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

最佳答案

在每次调用 scanf 时都是这样

scanf("%34[^\n]%*c", name);

删除第二个转换说明符

scanf("%34[^\n]", name);

而不是使用循环

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

否则例如在此代码片段中

scanf("%6[^\n]%*c", middlename);
while (getchar() != '\n');

您正在尝试读取新行字符'\n'两次。

另一种方法如下

printf("Please enter name: ");
scanf("%34[^\n]%*[^\n]", name);

printf("Please enter middle name: ");
scanf(" %6[^\n]%*[^\n]", middlename);

printf("Please enter last name: ");
scanf(" %34[^\n]*[^\n]", lastname);

注意 scanf 的第二次和第三次调用中第一个格式说明符之前的空白。

关于c - C 中清除缓冲区的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68530464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com