gpt4 book ai didi

c - 使用 fscanf 解析带符号的数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:41 25 4
gpt4 key购买 nike

我试图在将 if 存储到文件时为我的输入插入分隔符,但出现错误。当我尝试用空格插入时,似乎没问题。但是没有空格,还是报错。

这是我的代码,其中包含用于存储输入 student.name 和 student.pass 的空间:

fprintf(fp, "%s %s\n", student.name, student.pass);
fclose(fp);

当我检查它时:

while(fscanf(fp, "%s %s", &student.name, &student.pass) != EOF)
{
printf("Username is %s : Password is %s\n", student.name, student.pass);
if(strcmp(student.name, a)==0)
{
printf("Exists");
}
else
{
printf("Not Exists");
}
}

输出:

name: name;
pass: pass;
Username is name : Password is pass;

可以很好地处理空格,但我需要分隔符,因为当我尝试输入时:

name: my name;
pass: pass;
Username is my : Password is pass;
Username is name : Password is pass;

如何使用“|”通过分隔符修复此问题作为分隔符,我更喜欢输入是这样的:

fprintf(fp, "%s|%s\n", student.name, student.pass);
fclose(fp);

最佳答案

%s 读取数据直到遇到白色字符。因此,如果您使用这种数据格式,您的数据将无法使用空间。

修复它的一种方法是更新数据格式并使用高级格式字符串(C 样式代码):

int StudentWrite(FILE *f, Student *student) {
return 2 == fprintf(f, "%s\n%s\n", student->name, student->pass);
}

int StudentRead(FILE *f, Student *student) {
return 2 == fscanf(f, "%[^\n]%*c%[^\n]%*c", student->name, student->pass);
}

此格式字符串的工作方式如下:

  • %[^\n] 读取所有字符,直到结束行 \n
  • %*c 读取单个字符并将其丢弃。由于以前的格式读取所有但不读取结束行字符,因此读取并丢弃结束行字符。

为了保护数据免受缓冲区溢出扫描,格式字符串可以如下所示:%80[^\n]%*c%80[^\n]%*c 其中80 指示目标的容量,如 student->name(请记住,您必须计算终止零,因此缓冲区的实际大小必须比该值大 1)。

关于c - 使用 fscanf 解析带符号的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com