真的只是一个小查询,通过使用scanf,在我的情况下,将X个整数扫描成变量,每个整数用空格分隔。关于如何处理输入的任何提示/线索如果输入整数时,它们之间没有空格,例如,我的输入是这样的XXXX,但是如果输入了XX XX,我怎么能在我的scanf中处理它功能
请记住我的scanf(%d%d%d%d“....)
干杯。
答案 0 :(得分:1)
我会用计数器一次读取一个值,并检查一个数字是否大于9,99或999以检查多个数字。如果您这样做,请使用除法提取每个数字,并为每个数字增加计数器。
答案 1 :(得分:1)
您可以检查scanf()的返回值以确保它匹配,然后在收到后验证值是否在0到9之间。像这样:
int vars[4];
if (scanf("%d %d %d %d", vars[0], vars[1], vars[2], vars[3]) != 4) {
// error
}
然后检查每个变量是否在范围内:
for (int i = 0; i < 4; i++) {
if (vars[i] < 0 || vars[i] > 9) {
// error
}
}
答案 2 :(得分:1)
我只是避免scanf()
。如果每个整数只是一个数字,那么以下内容可能会起作用:
int vars[4];
for (int i = 0; i < 4;) {
int c = getchar();
if (isdigit(c)) {
vars[i++] = c - '0';
} else if (!isspace(c)) {
// error
break;
}
}
上述当然假设数字为'0'到'9'并且具有递增的连续值......并且每个都由单个char
表示 - 但这些可能是安全的假设。
答案 3 :(得分:0)
在按下回车按钮后读取scanf时,可能更容易将该行作为字符串读取,然后尝试分析它。您可以在功能齐全的终端上使用退格键等更正您的输入,因此对于用户而言,它比getchar更舒适。 我们只寻找个位数,是吗?
可能是这样的:
char buffer[SOMECOUNT];
int digits[4];
int read, i;
scanf("%s", buffer);
for(int i = 0; i < strnlen(buffer, SOMECOUNT); ++i)
{
if( read >= 4 )
break;
if( isdigit(buffer[i]) )
{
digits[read] = buffer[i] - '0';
read++;
}
}
if ( read < 4 )
printf(error...);
当然,这个SOMECOUNT
常量使得解决方案对于讨厌的输入有点脆弱,所以你可能想要使用限制:scanf(“%20s”,buffer)甚至构造格式字符串以包含SOMECOUNT