0) && (*num= '-6ren">
gpt4 book ai didi

c - 如何使用 sscanf 仅使用 stdio.h 确保输入的字符串长度为 1

转载 作者:行者123 更新时间:2023-11-30 17:27:08 26 4
gpt4 key购买 nike

基本上我必须使用 if 语句:

char post[2];
if ((1 == sscanf(origstr, "%1d%1s", num,post)) && (*num>0) && (*num<8))

问题是,当我输入“5”或“5”时,当我希望 if 语句为 false 时,它​​仍然为 true。顺便说一句:我在这里发帖,所以用户无法输入 4.5。因为当他们这样做时,4 会进入 num 和 '.'。进入 post[0] 这将使 sscanf==2。

为了清楚起见:我希望“5”、“5”、“5”等使 if 语句失败我只想让 '1','2',...,'7' 通过

最佳答案

使用"%[]"来限制可接受的char。使用 "%1[]" 将长度限制为仅 1 个 char"%*c" 将扫描除 '\0' 之外的任何 1 char,因为 sscanf() 不会提供这个字符sscanf() 返回值为 0、1 或 2。2 表示太多,0 表示没有 '1''7' .

char numbuf[2];
char post;
if (sscanf(origstr, "%1[1234567]%c", numbuf, &post) == 1) {
// Good
num = numbuf[0] - '0';
}

或者另一种选择

char num;
char post;
if ((sscanf(origstr, "%c%c", &num, &post) == 1) && (num >= '1') &&
(num <= '7')) {
// Good
num = num - '0';
}

或者另一种选择

int num;
int n;
if ((sscanf(origstr, "%d%n", &num, &n) == 1) && (num >= 1) && (num <= 7) &&
(n == 1)) {
// Good
}

或者另一种选择

int num;
int n;
if ((sscanf(origstr, "%o%n", &num, &n) == 1) && (num >= 1) && (n == 1)) {
// Good
}

关于c - 如何使用 sscanf 仅使用 stdio.h 确保输入的字符串长度为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499672/

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