вы можете использовать atoi
для преобразования строки в int и strcpy
для копирования строки в строку:
int arg1, arg2, arg3, arg4;
char arg5[256];
arg1 = atoi(argv[1]);
arg2 = atoi(argv[2]);
arg3 = atoi(argv[3]);
arg4 = atoi(argv[4]);
strcpy(arg5, argv[5]);
Для получения информации из файла вы можете использовать fgets
и sscanf
, Этот пример ниже только для массива count
узла (не для связанного списка, но вы можете использовать эту идею для связанного списка). fgets
для чтения файла и сохранения значения файла в строке. Вы можете использовать sscanf
для присвоения информации из этой строки каждому значению структуры.
int count = 1;
while (fgets(line, sizeof(line), file)) {
n = realloc(n, count * sizeof(Node));
n[count-1].name = malloc(sizeof(char) * 16);
if(!n)
return - 1;
sscanf(line, "%d %d %d %d %s\n", &n[count-1].x_position, &n[count-1].y_position, &n[count-1].min_rate, &n[count-1].max_rate, n[count-1].name);
count++;
}
Полный код для теста:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node{
int x_position, y_position;
int max_rate, min_rate;
char *name;
//struct node * prev;
}Node;
int main(int argc, char const *argv[]) {
char line[256];
int arg1, arg2, arg3, arg4;
char arg5[256];
Node * n = malloc(sizeof(Node));
if(!n)
return - 1;
FILE * file = fopen(argv[6], "r");
if (!file)
return -1;
arg1 = atoi(argv[1]);
arg2 = atoi(argv[2]);
arg3 = atoi(argv[3]);
arg4 = atoi(argv[4]);
strcpy(arg5, argv[5]);
int count = 1;
while (fgets(line, sizeof(line), file)) {
n = realloc(n, count * sizeof(Node));
n[count-1].name = malloc(sizeof(char) * 16);
if(!n)
return - 1;
//printf("%s", line);
sscanf(line, "%d %d %d %d %s\n", &n[count-1].x_position, &n[count-1].y_position, &n[count-1].min_rate, &n[count-1].max_rate, n[count-1].name);
count++;
}
printf("\narg1= %d, arg2 = %d, arg3 = %d, arg4 = %d, arg5 = %s\n", arg1, arg2, arg3, arg4, arg5);
for(int i = 0; i < count-1; i++) {
printf(" %d %d %d %d %s\n",
n[i].x_position, n[i].y_position, n[i].min_rate, n[i].max_rate, n[i].name);
}
}
Результат:
#cat text.txt
2 2 200 300 name
1 5 240 499 name2
3 5 400 500 name3
./test 1 2 3 4 abc text.txt
arg1= 1, arg2 = 2, arg3 = 3, arg4 = 4, arg5 = abc
2 2 200 300 name
1 5 240 499 name2
3 5 400 500 name3