正如预期的那样。应该接受一个数字,直到它遇到4,但它给了一些垃圾价值。为什么?
int main(void)
{
int a;
printf("Enter a number: ");
scanf("%[^4]d", &a);
printf("You entered: %d\n", a);
return 0;
}
答案 0 :(得分:2)
据我所知,扫描集应与字符串一起使用(这使得d
不能作为整数占位符规范)。编写它的一种方法是将输入读入字符串然后解析它:
int main(void)
{
int a;
char b[255];
printf("Enter a number: ");
scanf("%254[^4]", &b);
a = atoi(b);
printf("You entered: %d\n", a);
return 0;
}
我将修改后的代码保持在最低限度,你肯定需要对输入完整性进行一些额外的检查。
澄清:254
前缀限制scanf
将捕获的数据量,以便不超过缓冲区的大小(字符串以额外的空字符终止,因此读取长度必须小于实际尺寸) 1 。
答案 1 :(得分:1)