gpt4 book ai didi

c - 过滤后的 scanf 导致无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:16 25 4
gpt4 key购买 nike

我在一个程序中通过 scanf 过滤了输入。我想要只读数字和大字母 + 空格。

最近我正在尝试做类似的事情,但它陷入了无限循环,仍然只打印第一个输入。我知道 fgets(),但我知道这行得通。我找不到问题出在哪里。这是简化的情况;我怎么了?

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

int main()
{
char str[21];

do
{
scanf("%20[0-9A-Z ]", str);
printf("%s\n", str);
} while(strcmp("END", str) != 0);

return 0;
}

编辑:我忘了说,输入是有效的,对于输入:“HELLO”程序卡住...并且 scanf 仅对第一个输入返回 1,对其他返回 0。而且我也试过fflush(stdin),看了之后...

最佳答案

您的scanf 只接受数字、大写字母(拉丁字母)和空格,

scanf("%20[0-9A-Z ]", str);

因此,当您输入任何其他内容时,scanf 无法将输入分配给 str,并且有问题的输入仍保留在输入缓冲区中。您需要检查扫描是否成功并在失败时清除输入缓冲区。

并且由于特别是换行符不在有效输入标记中,如果输入来自例如,您需要清除输入缓冲区直到下一个换行符。键盘而不是无换行符的输入流。

int c;
do
{
scanf("%20[0-9A-Z ]", str);
printf("%s\n", str);
while((c = getchar()) != '\n' && c != EOF); // clear input buffer
} while(c != EOF && strcmp("END", str) != 0);

关于c - 过滤后的 scanf 导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902189/

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