int main(int argc, char **argv) {
char *input = "input.txt";
int *account;
char **name;
float *balance;
int count;
int check;
if (argc < 4 || argc > 4) {
printf("Insufficient arguments. Check your command line arguments\n");
return 1;
}
count = atoi(*(argv + 2));
name = malloc(sizeof(char) * 20 * count);
account = malloc(sizeof(int) * count);
balance = malloc(sizeof(float) * count);
check = load_data(input, name, account, balance, count);
if (check == 0) {
printf("File cannot be open\n");
}
print_data(name, account, balance, count);
free(name);
return 0;
}
//load data from input file the according arrays
int load_data(char *input, char **name, int *acct, float *amt, int n) {
int *a = acct;
float *b = amt;
FILE *file = fopen("input.txt", "r");
int i;
if (file == NULL) {
return 0;
} else {
for (i = 0; i < 9; i++, acct++, amt++) {
fscanf(file, "%s %d %f", *(name + i), acct, amt);
}
}
fclose(file);
acct = a; //return pointer to original position
amt = b;
return 1;
}
//print data from arrays
void print_data(char **name, int *acct, float *amt, int n) {
int i;
for (i = 0; i < n; i++) {
printf("%-10s%-13s%s\n", "Name", "Account No.", "Amount");
printf("%-10s%-13d%7.2f\n", *(name + i), *(acct + i), *(amt + i));
}
}
我有這個load_data
功能假設從文件中讀取和數據值存儲在不同的指針,但由於某些原因,當我打印出來使用print_data
函數,指針包含所有空和0? (請回答使用指針運算,而不是陣列)使用fscanf讀取文件不在c中工作?
這還不夠回答。輸入,名稱,acct,amt初始化?你有沒有檢查malloc是否返回NULL?我看到你不檢查fscanf讀取多少個字符......還要將你的代碼初始化所有參數 – Fefux
你爲所有這些值分配了內存嗎?告訴我們你如何調用'load_data'。 – pat
OT:'acct = a;'和'amt = b;'是無用的,因爲函數仍然存在,並且它們的值會丟失。它們只是傳遞給函數的值的副本。 – alk