0

非常に大きな配列にデータを格納するには、「longlong」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が得られます。これは、intであるため2に切り捨てられます。

于 2012-11-15T14:07:01.953 に答える
0
SIZEG/100

2の整数としてフォーマットされるため、コードは常にインデックス==100およびインデックス==200で出力されます。

于 2012-11-15T14:07:18.547 に答える