繁体   English   中英

从 c 中的 txt 文件读取

[英]Reading from txt file in c

所以我在阅读文本文件时遇到了麻烦。 我对代码很陌生,我希望我的代码能够读取 simple.txt 文件并存储一些内容:人名、时间(姓名后的 nr)等等。

我的txt文件有这样的格式: txt文件我需要存储一个人的名字,它位于一个"."之后":"符号之前:

  1. 佩德罗·门德斯:45

例如,在这一行中,我需要存储“Pedro Mendes”。

我的代码无法正常工作:

FILE *f;
f = fopen(filename,"rt");
if(f==NULL){
    printf("Erro no acesso ao ficheiro.\n");
    return NULL;
}

(...)

while(fgetc(f) != '.'); // finds the point
fscanf(f," %s %s",pnome,unome); //saves the name of a person
while(fgetc(f) != ':');
fscanf(f,"%d",&tempo);

我应该得到"Pedro Mendes"但我有"Pedro Mendes:" ,并且暂时我应该得到45但我有46 (我相信是从下一行读取)。

如果有人有答案,那就太好了,谢谢。

您可以像这样删除':'

char *c = strchr(unome, ':');
if(c)
    *c = '\0';

至于读错数,去掉while(fgetc(f):= ';'); 因为':'被存储在unome中。

scanf系列 function 被称为穷人解析器 它旨在直接处理空格分隔的元素(此处的行尾是空格)。 在任何其他情况下,它可以或不可以使用,但必须非常谨慎,并且其他库函数通常执行得更好(在更简单或更健壮的代码的意义上)。

IIUC,你有:

  • 你忽略的东西,直到一个点( .
  • 一个点
  • 表示名称的字符串,最多为一个冒号 ( : )
  • 冒号
  • 代表时间的数字

如果您不关心正确的行分隔,您可以使用[]格式说明符:

FILE *f = fopen(filename,"rt");
if (f == NULL) {
    ...
}
int cr = fscanf(f, "%*[^.].%[^:]:%d", nome, &tempo);
if (cr != 2) {
    ...
}

你已经失去了分离pnome , unome ,但好消息是它会接受Juan Pedro Mendez y Garcia ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM