我希望用户键入2个数字,然后使用scanf
函数将这两个数字读入2个int
变量中。
int num, num2;
scanf("%5d %d", &num, &num2);
printf("num = %d\n", num);
printf("num2 = %d\n", num2);
如果用户输入的第一个数字的位数大于5,则应丢弃多余的数字。
例如:如果用户在提示符下输入以下内容
% 12345678 222<Enter>
num = 12345
num2 = 678
我想要的是:
num = 12345
num2 = 222
我已将scanf
功能模式修改为以下内容:
scanf("%5d %*[0123456789] %d", &num, &num2 );
这似乎解决了问题,如果用户输入的第一个数字大于5位,但如果小于或等于5位,则此格式说明符将丢弃用户键入的第二个数字,第三个需要输入数字。
例如:如果用户在命令提示符下键入以下内容:
% 12345 222 333 <Enter>
num = 12345
num2 = 333
我想要的是:
num = 12345
num2 = 222
任何C专业人员都可以提供解决方案,谢谢。
答案 0 :(得分:2)
问题是扫描集之前之前的空间以及扫描集必须匹配才能移至下一个字段。试试这个:
scanf("%5d%*[0123456789]", &num);
scanf("%d", &num2);
需要2个scanf调用,因为如果第一个数字为5位或更少,则scanset 不匹配。
(而且您必须检查两者的返回值)
答案 1 :(得分:0)
这里的目标使我感到怀疑。即使您认为输入不正确,也无视它们,这会使用户感到困惑,并最终导致复合错误。
无论如何,仅通过调用scanf
就无法做到这一点。因此,您需要这样做:使用scanf
以整数形式读取最多五个字符。然后getc
下一个字符;如果是数字(请参见isdigit()
),则将其丢弃并重复。最后,scanf
第二个整数。