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

C 使用分隔符读取数据字符串并存储到结构中,c,pointers,struct,printf,delimiter,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个字符以内。 有谁能指导我如何编写代码?我很抱

我需要一些帮助来解决我遇到的一些问题。我不熟悉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;
}
#包括
#包括
#包括
int main()
{
char ch,文件名[25];
文件*fp;
炭碱;
printf(“输入您希望查看的文件名\n”);
获取(文件名);
fp=fopen(文件名,“r”);//读取模式
如果(fp==NULL)
{
perror(“打开文件时出错。\n”);
退出(退出失败);
} 
printf(“文件%s的内容是:\n”,文件名);
而((ch=fgetc(fp))!=EOF){
aline=(strtok,“:”);
while(aline!=NULL)
{
printf(“%s\n”,aline);
aline=strtok(NULL,“:”);
}}
fclose(fp);
返回0;
}

您可以使用
sscanf
fscanf

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;

您可以使用
strok()
。你应该发布你的代码,告诉我们你尝试了什么。你面临的问题。我甚至不知道如何开始。):@1336087使用
fgets
读取一行,使用
strtok
标记字符串,使用
strtol
转换每个标记。顺便说一句,这是你的作业吗?@1336087我不应该/不允许问作业。对不起,我不知道我的数据字符串来自文本文件。如何修改sscanf使其工作@kdhpI添加了一个带有
fscanf
的示例。谢谢。如何打印存储在结构中的数据?我尝试了
printf(“%c”和&st.E[1])但它不起作用。@JamesBond007在
printf
语句
%c
中需要一个字符,而您正在给它传递一个指针<代码>&st.E[1]==&(*(st.E+1))==st.E+1
如果在字符串末尾保留一个额外字符,并将其等效于
'\0'
,则
st.E
以null结尾,可以像任何其他C字符串一样处理<代码>printf(“%s”,st.E)我有点困惑。你是说我应该把我的语句改成printf(“%s”,st.E)?
if (scanf(...) != 5) {
    // either populate with default values or invalidate
}