使用分隔符读取数据字符串并存储到struct中

时间:2014-11-02 08:10:18

标签: c pointers struct printf delimiter

我需要一些帮助,解决我遇到的一些问题。我是C语言的新手,我需要帮助尝试读取中间带分隔符的数据字符串并将它们保存到struc中。我怎么能这样做?

字符串的格式如下,格式为A:B:C:D:E
示例
0002:0001:0001:0042:ASD
0001:0011:0010:0023:DDD

当正在读取字符串时,它正在被验证并同时存储到结构中。

A值应在1-100左右 B的值应在1-100左右 C的值应在1-10左右 D的值应在1-50之内 E的值应在25个字符以内。

任何人都可以指导我如何编写代码?如果这听起来很简单,我很抱歉,但我真的很新。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
   char ch, file_name[25];
   FILE *fp;
   char * aline;
   printf("Enter the name of file you wish to see\n");
   gets(file_name);

   fp = fopen(file_name,"r"); // read mode

   if( fp == NULL )
   {
      perror("Error while opening the file.\n");
     exit(EXIT_FAILURE);
      } 

       printf("The contents of %s file are :\n", file_name);

       while( ( ch = fgetc(fp) ) != EOF ){




   aline=(strtok,":");
   while (aline != NULL)
  {
    printf ("%s\n",aline);
    aline = strtok (NULL, " :");
  }}
     fclose(fp);
   return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使用sscanffscanf

填充结构
sscanf(string, "%d:%d:%d:%d:%26s", &struc->A, &struc->B, &struc->C,
                                   &struc->D,  sturc->E);

fscanf(file, "%d:%d:%d:%d:%26s", &struc->A, &struc->B, &struc->C,
                                 &struc->D,  sturc->E);

验证字符串,您可以检查是否覆盖了空字符,只需确保使用额外字符声明字符串。

if (struc->E[26] != '\0') {
    struc->E[26] = '\0';
    goto invalid;
}

验证其他字段将是简单的边界检查

if (struc->A < 1 || struc->A > 100) goto invalid;

您还应注意scanf函数并不总是填充每个字段,并将返回它们填充的字段数。因此,如果您期望输入不规则,则应检查返回的数字。

if (scanf(...) != 5) {
    // either populate with default values or invalidate
}