好吧,我整天都呆在这儿,不能一辈子都忘了这件事,也许你的小伙子可以帮上忙。我有一个文件,内容如下


  1301,105515018,“ Boatswain”,“ Michael R。”,ABC,123,=“ R01”
  
  1301,103993269,“ Castille”,“ Michael Jr”,ABC,123,=“ R03”
  
  1301,103993267,“ Castille”,“ Janice”,ABC,123,=“ R03”
  
  1301,104727546,“ Bonczek”,“ Claude”,ABC,123,=“ R01”
  
  1301,104731479,“ Cruz”,“ Akeem Mike”,ABC,123,=“ R01”
  
  1301,105415888,“ Digiacomo”,“ Stephen”,ABC,123,=“ R02”
  
  1301,106034479,“ Annitto Grassis”,“ Susan”,ABC,123,=“ R04”
  
  1301,106034459,“ Als”,“ Christian”,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");

}


我的目标是在文本文件中获取这些值中的每个值,并将其输入到struct和随后的struct数组中的所属位置,但是我无法传递前两个int。

获取姓氏字符串,因为它最多可以包含15个字符,因此它会溢出到名字字符串之后,并获取剩余的字符以填充姓氏char数组。显然我不想要这个。如您所见,我已经尝试过strtok,但是它什么也没做,不确定我该怎么做,因为我以前从未使用过。也尝试过将所有变量都包含到fscanf语句中,但是我得到的输出相同,否则会变得一团糟。实际上,我非常迷失,如何将这些值放入它们所属的变量中?

编辑:更新了我的代码,我走得更远,但不多。现在,我只能打印出姓氏,但不能再打印更远的地方,我无法找到名字字符串或任何其他变量。

最佳答案

您所拥有的是带有带引号的字符串的CSV文件,因此,我建议您使用CSV解析器(或自行滚动),而不要尝试使用scanf进行所有操作(因为scanf无法处理引号,例如用引号引起来的字符串中的逗号)。快速的Google搜索会显示libcsv.c,您可以在项目中使用它。

10-06 08:19