Хорошо, я был в этом весь день и не могу за жизнь мне это записать, может быть, вы, ребята, можете помочь. У меня есть файл, который читается следующим образом
1301,105515018,"Боцман","Майкл Р.",ABC, 123,="R01"
1301,103993269,"Кастилия","Майкл младший",ABC, 123,="R03"
1301,103993267,"Кастилия","Дженис",ABC, 123,="R03"
1301,104727546,"Бончек","Клод",ABC, 123,="R01"
1301,104731479,"Круз","Аким Майк",ABC, 123,="R01"
1301,105415888,"Дигиакомо","Стивен",ABC, 123,="R02"
1301,106034479,"Аннитто Грасси","Сьюзен",ABC, 123,="R04"
1301,106034459, "Алс", "Христианин", ABC, 123, = "R01"
И вот мой код...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME 15
#define MAX_SUBSEC 3
#define N 128
//void printArr(struct *students);
struct student{
int term;
int id;
char lastname[MAX_NAME];
char firstname[MAX_NAME];
char subjectname[MAX_SUBSEC];
int catalog;
char section[MAX_SUBSEC];
}students[10];
int main(){
int term;
int id;
char lastname[MAX_NAME];
char firstname[MAX_NAME];
char sub[MAX_SUBSEC];
int cat;
char sec[MAX_SUBSEC];
char fname[N];
FILE *inputf;
printf("Enter the name of the text file: ");
scanf("%123s",fname);
strcat(fname,".txt");
inputf = fopen(fname,"r");
if (inputf == NULL){
printf("I couldn't open the file for reading.\n");
exit(0);
}
//TROUBLE HERE!
fscanf(inputf, "%d,%d,%[^,]s", &students[0].term, &students[0].id,students[0].lastname);
printf("%d\n", students[0].term);
printf("%d\n", students[0].id);
printf("%s\n", students[0].lastname);
/*for (j = 1 ; j <= 10-1 ; j++){
for(k = 0 ; k <= 10-2 ; k++){
if(students[k] > students[k+1]){
temp = students[k];
students[k] = students[k+1];
students[k+1] = temp;
}
}
}*/
fclose(inputf);
system("pause");
return 0;
}
void printArr(int a[], int tally){
int i;
for(i = 0 ; i < tally ; i++){
printf("%d ", a[i]);
}
printf("\n");
}
Моя цель - взять каждое из этих значений в текстовом файле и ввести его туда, где оно принадлежит в структуре, а затем в массиве структур, но я не могу передать первые 2 целых числа.
Получение строки фамилии, поскольку она состоит максимум из 15 символов, она переходит в строку имени сразу после нее и берет оставшиеся символы, необходимые для заполнения массива символов фамилии. Очевидно, я не хочу этого. Как вы можете видеть, я попробовал strtok, но он ничего не делает, хотя не уверен, что мне нужно делать, поскольку я никогда не использовал его раньше. Также попытался просто включить все переменные в оператор fscanf, но я либо получаю тот же результат, либо становится беспорядком. Как бы то ни было, я очень растерялся, как мне получить эти значения в переменных, которым они принадлежат?!
РЕДАКТИРОВАТЬ: обновил мой код, я продвинулся немного дальше, но не намного. Теперь я могу распечатать только фамилию, но не могу дальше, я не могу добраться до строки имени или какой-либо из переменных за ее пределами.