我需要使用'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;
}
所以我想知道,如果我做错了什么或者对这个问题有逻辑解释。
谢谢。
答案 0 :(得分:3)
在整数运算中,222/100 == 2.
您可以将您的比较重新编写为:
if (i == S/2) /* 50% */
if (i == S-1) /* 100% */
代替。
答案 1 :(得分:0)
答案 2 :(得分:0)
SIZEG/100
将被格式化为整数, 2 ,因此您的代码将始终以index == 100和index == 200
打印