0

我需要使用'long long' c 类型,将数据存储在一个非常大的数组中。由于我的代码很大,我编写了这个相当简单的代码,它有同样的问题。因此,它在循环中迭代 222 次,并在循环达到 50%(在数组中存储值)和 100%(完成时)时打印出来。

但它总是给我错误,例如在这种情况下,数组的 50% 应该打印索引 222/2 = 111,而 100% 应该打印索引 222。但是它总是打印 100 和 200。

这是我使用的简单代码,下面是结果。

#include<stdio.h>
#define S 222
int main(void){
    char *text = calloc(S, sizeof(char));   
     unsigned long long i;
    for(i=0; i<=S; i++){
    text[i] = 'a';

    if(i == (S/100)*50)) {printf("50percent\t and index : %llud index should be 111" ,i );}
    if(i == ((S/100)*100)){printf("100percent\t and index : %llud index should be 222", i);}        
}
return 0;
}

所以我想知道,如果我做错了什么,或者这个问题是否有逻辑解释。

谢谢你。

4

3 回答 3

3

在整数算术中,222/100 == 2。

您可以将比较修改为:

if (i == S/2) /* 50% */
if (i == S-1) /* 100% */

反而。

于 2012-11-15T14:04:45.137 回答
0

那是因为你先做除法。如果你将 222 除以 100,你会得到 2.22,它会被截断为 2,因为它是一个 int

于 2012-11-15T14:07:01.953 回答
0
SIZEG/100

将被格式化为整数,即2,因此您的代码将始终在 index == 100 和 index == 200 处打印

于 2012-11-15T14:07:18.547 回答