如何在不分配额外数组或内存的情况下进行scanf

时间:2019-05-27 11:38:10

标签: c struct scanf

我必须按以下顺序写结构信息:

输入:[姓名],[姓氏],[索引]
输出:[名称] [姓氏],[索引]

在输入中,每个单词都必须用逗号和空格分隔,但在输出中,只有SURNAME和INDEX必须用逗号分隔。我已经做到了,它可以正常工作,但是带有额外的数组,但是现在我必须不使用额外的数组或分配内存来做到这一点。

这就是我所做的:

struct student_t
{
   char name[20];
   char surname[40];
   int index;
};
int main(int argc, char *argv[]) {
struct student_t dl;
int err;

if (read(&dl, &err)==NULL)
{
    printf("Incorrect input");
    return 1;
}

show(&dl);

return 0;
}
struct student_t* read(struct student_t* p, int *err_code)
{
   char arr[500];
   if (fgets(arr, 500, stdin)){
      char *name=strtok(arr, ",");
      if (name){
         sscanf(name, " %19s", p->name);  
         char *surname=strtok(NULL, ",");
         if (surname){
            sscanf(surname, " %39s", p->surname);
            char *index=strtok(NULL, ",");
            if (index){
               p->index=(int)strtol(index, NULL, 10);
            }
         }
      }
   }
}

我还必须设置err_code的值:
0成功,
1-输入中没有指向结构的指针或逗号,
仅2个名称已正确加载,
仅3个姓名和姓氏已正确加载。

0 个答案:

没有答案