我有一個很大的樣本大小,所以我做了一個大陣列并將檔案的資料讀入其中,但我的代碼由于某種原因沒有編譯
#include <stdio.h>
int main(){
FILE *file;
file = fopen("elephantArray.txt", "r");
if( file == NULL){
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}
int weight;
int weightSet[10000];
int i = 0;
while(fscanf(file, "%d\t", &weightSet[i]) != EOF){
printf("%d\n", weightSet[i]);
i ;
}
fclose(file);
int j = 0;
int sum = 0;
int size=0;
for(int j=0; j<10000;j ){
while(weightSet[j]!=NULL){
sum = sum weightSet[j];
size ;
}
}
int average= sum/size;
printf(average);
return 0;
}
我收到了預期的 const char 錯誤,但引數是 int 型別,我很困惑為什么?
uj5u.com熱心網友回復:
這條線
while(fscanf(file, "%d\t", &weightSet[i]) != EOF){
不是 100% 正確的。你應該
檢查
i不超過陣列大小將
scanf回傳值與 1進行比較洗掉
\t它,因為它沒有做任何有用的事情。
也一樣
while(i < 10000 && fscanf(file, "%d", &weightSet[i]) == 1){
“錯誤預期為 const char 但引數為 int 型別”的原因很簡單:
printf(average); ---> printf("%d\n", average);
也就是說,您計算總和的代碼是錯誤的,即此代碼不起作用:
for(int j=0; j<10000;j ){
while(weightSet[j]!=NULL){ // This will be an endless loop...
sum = sum weightSet[j];
size ;
}
}
而是i在 for 回圈中使用 asi保存有效陣列元素的數量:
sum = 0;
for(int j=0; j<i; j ){
sum = sum weightSet[j];
}
if (i != 0) {
int average = sum/i;
printf("%d\n", average);
}
else
{
puts("No integers found in the file");
}
順便說一句:請注意,將平均值計算為整數可能會給出一些令人驚訝的結果。
uj5u.com熱心網友回復:
#include <stdio.h>
int main(){
FILE *file;
file = fopen("elephantArray.txt", "r");
if( file == NULL){
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}
int weight;
int weightSet[10000];
int i = 0;
while(fscanf(file, "%d\t", &weightSet[i]) == 1){
printf("%d\n", weightSet[i]);
i ;
}
fclose(file);
int j =0;
int sum=0;
int size=0;
for(j=0; j<i;j ){
sum = sum weightSet[j];
}
if (i != 0) {
int average= sum/i;
printf("%d\n", average);
}
else
{
puts("No integers found in the file");
}
int average= sum/size;
printf("%d\n", average);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324803.html
標籤:C
上一篇:使用C定義來簡化常量定義?
下一篇:ARMGCC產生未對齊的STRD
