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