gpt4 book ai didi

检查用户输入数组是否太长?

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

我让用户输入 4 个数字。它们可以输入:1 2 3 4 或 1234 或 1 2 34 等。我目前正在使用

int array[4];
scanf("%1x%1x%1x%1x", &array[0], &array[1], &array[2], &array[3]);

但是,如果用户输入太多数字,我想显示错误:12345 或 1 2 3 4 5 或 1 2 345 等。

我该怎么做?

我是 C 的新手,所以请尽可能多地解释。

//

感谢您的帮助。我现在尝试做的是:

char line[101];
printf("Please input);
fgets(line, 101, stdin);
if (strlen(line)>5)
{
printf("Input is too large");
}
else
{
array[0]=line[0]-'0'; array[1]=line[1]-'0'; array[2]=line[2]-'0'; array[3]=line[3]-'0';
printf("%d%d%d%d", array[0], array[1], array[2], array[3]);
}

这是一种明智且可以接受的方式吗?它编译并似乎在 Visual Studios 上工作。它会在 C 上编译和运行吗?

最佳答案

OP 在正确的轨道上,但需要调整以处理错误。

目前使用 scanf() 的方法可以用来检测问题,但不能很好地恢复。相反,请使用 fgets()/sscanf() 组合。

char line[101];
if (fgets(line, sizeof line, stdin) == NULL) HandleEOForIOError();
unsigned arr[4];
int ch;
int cnt = sscanf(line, "%1x%1x%1x%1x %c", &arr[0], &arr[1], &arr[2],&arr[3],&ch);
if (cnt == 4) JustRight();
if (cnt < 4) Handle_TooFew();
if (cnt > 4) Handle_TooMany(); // cnt == 5

ch 捕获 4 个数字后任何潜伏的非空白 char
如果在 unsigned 中查找 1 个十进制数字,请使用 %1u
如果在 int 中查找 1 个十进制数字,请使用 %1d


OP 第二种方法 array[0]=line[0]-'0'; ...,还不错,就是有一些缺点。它不会执行良好的错误检查(非数字),也不会像第一个那样处理十六进制数字。此外,它不允许前导或散布空格。

关于检查用户输入数组是否太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20843767/

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