我正在尝试生成一个随机的10位数代码,但即使我使用代码中每个数字的绝对值,它仍然会打印一个负值
#include <stdio.h>
int main()
{
int i;
int r;
int barcode[11];
srand(time(NULL));
for(i=0;i <= 10;i++){
r = rand() % 10;
barcode[i] = abs(r);
}
printf("%d",barcode);
return 0;
}
答案 0 :(得分:7)
因为您实际上是在打印整数数组的地址,而不是字符串。
这一行:
printf("%d",barcode);
基本上将barcode
的地址打印为有符号整数,而不是条形码的内容。
你当然可以这样做:
printf("%d%d%d%d%d%d%d%d%d%d",barcode[0], barcode[1], barcode[2], barcode[3], barcode[4], barcode[5], barcode[6], barcode[7], barcode[8], barcode[9]);
但也许更好的方法是生成一串字符而不是整数数组。对代码的快速修改是在循环的每个交互中向每个随机值添加'0'
并附加到char数组。
int main()
{
int i;
int r;
char barcode[11]; // array of chars instead of ints
srand(time(NULL));
for(i=0; i < 10; i++) // loop 10 times, not 11
{
r = rand() % 10;
barcode[i] = '0' + r; // convert the value of r to a printable char
}
barcode[10] = '\0'; // null terminate your string
printf("%s\n",barcode);
return 0;
}
以上将生成10位数代码,第一个数字为前导零的可能性很小。如果那不是你想要的,那就是一个简单的bug修复。 (我将留给你......)