所以我有一个带有一堆名字和数字的输入文件。我开始使用strtok分解字符串,以便可以从每个字符串中提取所有数据。一切似乎都正常运行,但是由于某种原因,它没有放弃换行符。
int procFile(PERSON **data, FILE* fpFile)
{
// Local Declaration
char temp[1000];
char proc[15];
char *entry;
char *loc;
int success = 0;
// Statement
if(fgets(temp, sizeof(temp), fpFile))
{
(*data) = aloMem(); // free
entry = temp;
loc = strtok(entry, " ()-");
strcpy(proc, loc);
loc = strtok(NULL, " ()-");
strcat(proc, loc);
loc = strtok(NULL, " ()-");
strcat(proc, loc);
sscanf(proc, "%ld", &(*data)->phone);
loc = strtok(NULL, "\0");
strcpy((*data)->name, loc);
success++;
printf("%s1", (*data)->name);
}
return success;
}// procFile
Run Code Online (Sandbox Code Playgroud)
我尝试打印结果以查看其是否正常工作,这是我的输出。
Brown, Joanne
1South, Frankie
1Lee, Marie
1Brown, Joanne
1Trapp, Ada Eve
1Trapp, David
1White, D. Robert
1Lee, Victoria
1Marcus, Johnathan
1Walljasper, Bryan
1Trapp, Ada Eve
1Brown, Joanne
1Andrews, Daniel
Run Code Online (Sandbox Code Playgroud)
它1在换行符上的每个名称之后打印,而不是在名称之后。有人可以向我解释如何解决该问题吗?
在标记化之前temp,删除换行符如下:
char *newline = strchr( temp, '\n' );
if ( newline )
*newline = 0;
Run Code Online (Sandbox Code Playgroud)
strchr搜索temp换行符,并返回指向它的指针(如果找不到换行符,则返回 NULL)。然后我们用 0(字符串终止符)覆盖换行符。