长C型的划分

长C型的划分,c,long-integer,unsigned-long-long-int,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

我需要使用“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;
}
#包括
#定义S 222
内部主(空){
char*text=calloc(S,sizeof(char));
未签名的长i;

对于整数算术中的(i=0;i,222/100==2

您可以将比较修改为:

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

相反。

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

您可以将比较修改为:

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

相反。

那是因为你先做除法。如果你把222除以100,你得到2.22,它被截断为2,因为它是一个整数。这是因为你先做除法。如果你把222除以100,你得到2.22,它被截断为2,因为它是一个整数

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


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

您分配222个字符,但将数据分配给223个字符。i您分配222个字符,但将数据分配给223个字符。i