[英]Reading from txt file in c
所以我在阅读文本文件时遇到了麻烦。 我对代码很陌生,我希望我的代码能够读取 simple.txt 文件并存储一些内容:人名、时间(姓名后的 nr)等等。
我的txt文件有这样的格式: txt文件我需要存储一个人的名字,它位于一个"."
之后在":"
符号之前:
例如,在这一行中,我需要存储“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.