分长C型

时间:2012-11-15 14:02:37

标签: c long-integer unsigned-long-long-int

我需要使用'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;
}

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

谢谢。

3 个答案:

答案 0 :(得分:3)

在整数运算中,222/100 == 2.

您可以将您的比较重新编写为:

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

代替。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

SIZEG/100

将被格式化为整数, 2 ,因此您的代码将始终以index == 100和index == 200

打印