我理解如何读取文本文件并扫描/打印整个文件,但如何将一行分成几个字符串?另外,可以将变量分配给稍后要调用的字符串吗? 到目前为止我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fPointer;
fPointer = fopen("p1customer.txt", "r");
char singleLine[150];
int id;
while (!feof(fPointer)){
fscanf(fPointer, "%d", &id);
printf("%d",id);
}
fclose(fPointer);
return 0;
}
要读取的示例文本文件: 99999 John Doe篮球
示例输出: John Doe的身份证号码为99999并且打篮球
我正在尝试拆分/标记这些字符串并为它们分配变量(IDnumber,Name,Sport)并将输出打印在新文件中。
答案 0 :(得分:0)
您可以使用库函数strtok(str,chrs)
函数。
strtok(str,chrs)
一系列调用将str
拆分为令牌,每个令牌都由chrs
中的字符分隔。
序列中的第一个调用是非空str
。它在str
中找到第一个由chars而不是chrs
组成的标记;它通过覆盖下一个字符来终止它str
\0
并返回指向token
的指针。由NULL
值str
指示的每个后续调用都会重新指向下一个此类token
的指针,从刚刚结束的那个搜索过来。
答案 1 :(得分:0)
您应该发布输入文件的示例,以便您可以更详细地提供帮助。 我已经看到你也输入了一个字符串,我想你想填写一些东西,但你没有指明。 如果要将文件视为数字列表,则代码示例可能如下所示。
#include <stdio.h>
int main() {
FILE *infile;
char buf[100];
int len_file=0;
if(!(infile = fopen("p1customer.txt", "r"))) { /*checks the correct opening of the file*/
printf("Error in open p1customer.txt\n");
return 1;
}
while(fgets(buf,sizeof(buf),infile)!=NULL) /*check the lenght of the file (number of row) */
len_file++;
int id[len_file];
int i=0;
rewind(infile);
while(fgets(buf,sizeof(buf),infile)!=NULL) {
sscanf(buf,"%i",&id[i]);
i++;
}
for(i=0;i<len_file;i++)
printf("%i\n",id[i]);
fclose(infile);
return 0;
}
如果要将文件视为由空格分隔的每行上的数字的不确定列表,则可以使用sscanf格式%31[^ ]
中的字符串解析,其中任务包括读取在遇到空格之前,您还可以添加一个变量,该变量对于读取的每个字符/数字都会递增。
然后,您可以使用isalpha
库中的ctype.h
函数检查行中是否有任何字符,以查看是否有任何字符,然后将它们插入字符串,直到找到终止字符'\ 0'
。
可能性是无限的,所以输入文件很有用,当你提供它时,我会更新答案。