gpt4 book ai didi

c - 函数strstr只检测文本文件最后一行的子字符串?

转载 作者:行者123 更新时间:2023-11-30 14:53:23 26 4
gpt4 key购买 nike

第一个函数输入文件名和试图在文件中查找的子字符串

void userinput(char filename[],char word[])
{
printf("Enter the name of the file\n");
gets(filename);

printf("Enter the word\n");
gets(word);

}

第二个函数读取文件并打印子字符串的地址(如果能够找到它)。

 void findandreplace(char filename[], char word[])
{
FILE *infile;

char *ptr1,*ptr2,filearray[1024];
infile=fopen(filename,"r");

if(infile==NULL)
{
perror("Could not open file");
exit(EXIT_FAILURE);
}

while(fgets(filearray,sizeof(filearray),infile)!=NULL)

ptr1=filearray;

if(strstr(filearray,word))
{
ptr2=strstr(ptr1,word);
printf("%p",ptr2);
}

else
{
printf("Entered word not found in file");

}

}

函数 strstr 只能检测文件最后一行中的子字符串,我确实知道 fgets 在缓冲区中留下一个尾随换行符,但我使用 gets 函数作为用户输入,所以在这个情况并非如此。

有人可以告诉我为什么会发生这种情况吗?

最佳答案

问题是这样的:

while(fgets(filearray,sizeof(filearray),infile)!=NULL)

ptr1=filearray;

您的 while 循环没有关联的 block 。它应该看起来像这样。

while( condition ) {
code to do for each iteration
}

在C中,如果循环或if语句没有 block ,它将使用下一个语句。所以你上面写的和这个是等价的。

while(fgets(filearray,sizeof(filearray),infile)!=NULL) {
ptr1=filearray;
}

您将遍历文件中的每一行并将它们分配给 ptr1。在文件循环结束时,只有 ptr1 中的最后一行。然后其余代码就在最后一行运行。

相反,你想要这个。

while(fgets(filearray,sizeof(filearray),infile)!=NULL) {
ptr1=filearray;

if(strstr(filearray,word))
{
ptr2=strstr(ptr1,word);
printf("%p",ptr2);
}

else
{
printf("Entered word not found in file");

}
}
<小时/>

为了避免将来出现此类问题,请务必使用自动缩进代码的编辑器。例如,Atom是一个不错的选择。缩进将立即显示问题。这是让 Atom 自动缩进后代码的样子。

while(fgets(filearray,sizeof(filearray),infile)!=NULL)

ptr1=filearray;

if(strstr(filearray,word))
{
ptr2=strstr(ptr1,word);
printf("%p",ptr2);
}

else
{
printf("Entered word not found in file");

}

请注意以下语句的缩进方式与 while 语句相同。这告诉您它们不是 while 循环的一部分。

相比之下,当我将 block 放入并自动缩进时,您可以清楚地看到哪些语句位于 while 循环内。

while(fgets(filearray,sizeof(filearray),infile)!=NULL) {
ptr1=filearray;

if(strstr(filearray,word))
{
ptr2=strstr(ptr1,word);
printf("%p",ptr2);
}

else
{
printf("Entered word not found in file");

}
}

关于c - 函数strstr只检测文本文件最后一行的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com