无法比较令牌
Can't compare tokens
我用 C 写了一个代码来标记文件中的数据。如果当前标记等于 SIOL
,我想打印一些数据。我的问题是 strcmp
不起作用。你能发现任何错误吗?这是代码。感谢您的帮助
int main()
{
FILE* fp;
char line[1024];
char *val1;
fp = fopen("sample1.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
val1 = strtok(line, " ");
if (strcmp(val1,"SIOL")==0)
{
printf("Sucess!");
return 0;
}
else
{
while(val1)
{
printf("%s\n", val1);
val1=strtok(NULL, " ");
}
}
}
}
sample1.txt 像这样:
HAHA
SIOL
Hello World!
SIOL
123 4 345 65 756 867 789797
Hello World
您的实施中的问题是它没有正确对待 \n
。
当fgets
遇到'\n'
字符时,returns将其作为字符串的一部分。因此,当您标记化时,您文件中的两个 "SIOL"
字符串都会作为 "SIOL\n"
返回到您的程序,因为它们都位于字符串的末尾。 strcmp
不认为 "SIOL"
和 "SIOL\n"
彼此相等,因此它 returns 是一个非零值。
要解决此问题,请将 '\n'
添加到您的程序接受的分隔符列表中:
val1 = strtok(line, " \n"); // change the second call of strtok as well
这将确保 strtok
消除令牌末尾的 '\n'
,并将干净的令牌传回给您。
我用 C 写了一个代码来标记文件中的数据。如果当前标记等于 SIOL
,我想打印一些数据。我的问题是 strcmp
不起作用。你能发现任何错误吗?这是代码。感谢您的帮助
int main()
{
FILE* fp;
char line[1024];
char *val1;
fp = fopen("sample1.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
val1 = strtok(line, " ");
if (strcmp(val1,"SIOL")==0)
{
printf("Sucess!");
return 0;
}
else
{
while(val1)
{
printf("%s\n", val1);
val1=strtok(NULL, " ");
}
}
}
}
sample1.txt 像这样:
HAHA
SIOL
Hello World!
SIOL
123 4 345 65 756 867 789797
Hello World
您的实施中的问题是它没有正确对待 \n
。
当fgets
遇到'\n'
字符时,returns将其作为字符串的一部分。因此,当您标记化时,您文件中的两个 "SIOL"
字符串都会作为 "SIOL\n"
返回到您的程序,因为它们都位于字符串的末尾。 strcmp
不认为 "SIOL"
和 "SIOL\n"
彼此相等,因此它 returns 是一个非零值。
要解决此问题,请将 '\n'
添加到您的程序接受的分隔符列表中:
val1 = strtok(line, " \n"); // change the second call of strtok as well
这将确保 strtok
消除令牌末尾的 '\n'
,并将干净的令牌传回给您。