printf("\n\tHow many integers: ");
scanf("%d", &num);
iPtr = (int*) malloc(num * sizeof(int));
for(i = 0; i < num; i++) {
printf("Enter integer # %d ", i + 1);
scanf("%d", (iPtr + i));
temp = *(iPtr + i);
while(temp != 0) {
if(i == temp % 10) {
ary[i]++;
}
temp /= 10;
}
}
for(i = 0; i < 10; i++) {
if(ary[i] > 0) {
printf("digit %d : %d\n", i, ary[i]);
}
}
我正在编写一个程序来存储整数中出现的数字,但是当我运行程序时,我看到数组不能正常工作
所以我想问为什么不允许我存储整数的数字? 以及如何解决它?
还有1个问题,if(x = y)和if(x == y)
之间有什么不同?答案 0 :(得分:1)
你的问题是这一行:
if(i == temp % 10)
由于operator precedence,在=%之前评估==。用括号括住%来修复:
if(i == (temp % 10))
击> <击> 撞击>
另外,要回答你的其他问题以及一些挑剔(事先道歉):
答案 1 :(得分:1)
以下循环需要重新考虑
while(temp != 0) {
if(i == temp % 10) {
ary[i]++;
}
temp /= 10;
}
我不确定你在这里尝试的是什么。
首先考虑if(i == temp % 10)
所以假设你刚刚开始执行这个循环。所以我= 0。假设您输入的第一个数字是1023。所以
i = 0
temp = 1023
现在1023%10会给你3。
因此你的if循环变为if(0 == 3 )
//它是一个等式检查。 0是否等于3。
显然这将是错误的,因此你永远不会执行内部数组循环。
答案 2 :(得分:1)
好的,所以你几乎做对了,但我认为最大的问题是你的数组开始时有垃圾(声明时)。
int i, temp, num, *iPtr;
int ary[10] = {0}; //I can only assume you did *not* do this
//printf("\n\tHow many integers: ");
//scanf("%d", &num);
num = 2;
iPtr = malloc(num * sizeof(int));
for(i = 0; i < num; i++)
{
printf("Enter integer # %d ", i+1);
scanf("%d", (iPtr +1));
temp = *(iPtr+1);
while(temp != 0)
{
if( (i) == temp % 10)
{
ary[i]++;
}
temp /= 10;
}
}
for(i = 0; i < 10; i++)
{
if(ary[i] > 0)
{
printf("digit %d : %d\n", i, ary[i]);
}
}
此程序也不完整,因为您的循环可能在您检查足够高的数字以匹配之前结束。即,你正在检查temp是否仍然有一个数字,但你只是将它与 i 进行比较,这不会改变(所以如果temp中的数字是9,但我是1,你永远不会触发看到有9来计算)。
所以我修改了
if( (i) == temp % 10)
{
ary[i]++;
}
到
for (int zz = 0; zz < 10; zz++)
{
if( (zz) == temp % 10)
{
ary[zz]++;
}
}
现在程序计算所有数字。 输出:
这是假设我甚至理解你的程序。通常我不喜欢直接发布代码,但我真的不知道如何解决问题。累了的atm。 :/
答案 3 :(得分:0)
if(x = y) - &gt;这是一个赋值运算符。即你将y的值赋给x。这将始终将y分配给x并执行其中的语句。
if(x == y) - &gt;这是一个比较运算符。在这里,您要比较x的值是否等于y。如果为true,它将执行{}内的语句,否则不会。