user-0 提问: 如何用C读取一个TXT文档中的特定数据。

回复:
user: user-1
content: 引用 4 楼 云海玉弓缘 的回复:楼上的BF函数很好用，不过下面稍微改下就OK了。这么改：  # include <stdio.h> # define N 501 int BF(char a[],char b[])//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 { int i=0,j=0;  while (a[i]&&b[j])  if (a[i++]==b[j]) ++j;   // 继续比较后继字 else (i-=j)&&(j=0); return b[j]?0:i;   //返回 } int main(){     int F,i=1;     char A[N];     char B[]={"07 00 07 00"};     char result[6] = { "" };     freopen("123.txt","r",stdin);     while(gets(A))     {         F=BF(A,B);         if(F)         {             A[F + 7] = '\0';              strncpy(result, A+1+F, 5);             printf("idx:%d %s -> %s\n", x, A, result);         }         x++;     }     return 0; }    为什么我的程序里显示 gets为未知标识符。。

user: user-2
content: 要严谨的实现，还得用我代码中的办法。

user: user-3
content: 最实用的方法是通过管道调用awk命令玩

user: user-4
content: 引用 4 楼 iraya 的回复:楼上的BF函数很好用，不过下面稍微改下就OK了。这么改： 最后的printf函数内的x和x++ 改成i，  i++， 笔误。

user: user-4
content: 楼上的BF函数很好用，不过下面稍微改下就OK了。这么改：  # include <stdio.h> # define N 501 int BF(char a[],char b[])//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 { int i=0,j=0;  while (a[i]&&b[j])  if (a[i++]==b[j]) ++j;   // 继续比较后继字 else (i-=j)&&(j=0); return b[j]?0:i;   //返回 } int main(){     int F,i=1;     char A[N];     char B[]={"07 00 07 00"};     char result[6] = { "" };     freopen("123.txt","r",stdin);     while(gets(A))     {         F=BF(A,B);         if(F)         {             A[F + 7] = '\0';              strncpy(result, A+1+F, 5);             printf("idx:%d %s -> %s\n", x, A, result);         }         x++;     }     return 0; }

user: user-5
content: # include <stdio.h> # define N 501 int BF(char a[],char b[])//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 { int i=0,j=0;  while (a[i]&&b[j])  if (a[i++]==b[j]) ++j;   // 继续比较后继字 else (i-=j)&&(j=0); return b[j]?0:i;   //返回 } int main(){     int F,i;     char A[N];     char B[]={"07 00 07 00"};     freopen("123.txt","r",stdin);     while(gets(A))     {         F=BF(A,B);         if(F)         {             A[F+4]='\0';             puts(A+F);         }     }     return 0; }  我对文件读取不太了解 希望 这个函数 BF  应该能帮到你，如果需要其他标志  可以改改B[]字符串

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <conio.h> #include <windows.h> #include <wincon.h> FILE *f; char c; long offset; char patch[3]="\x1b\x6d";//\x00 default void main(int argc,char **argv)//".vs\0\x31\0\0\x1f\x00\x08"->".vs\0\x31\0\0\x1b\x6d\x00" {     if (argc!=2) {         printf("VxPatch filename.vx");         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);         return;     }     if (NULL==(f=fopen(argv[1],"r+b"))) {         printf("----------Can not find %s!",argv[1]);         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);         return;     }     while (1) {         c=fgetc(f);         if (feof(f)) break;//         if (c=='.') {             c=fgetc(f);             if (feof(f)) break;//             if (c=='v') {                 c=fgetc(f);                 if (feof(f)) break;//                 if (c=='s') {                     c=fgetc(f);                     if (feof(f)) break;//                     if (c=='\0') {                         c=fgetc(f);                         if (feof(f)) break;//                         if (c=='\x31') {                             c=fgetc(f);                             if (feof(f)) break;//                             if (c=='\0') {                                 c=fgetc(f);                                 if (feof(f)) break;//                                 if (c=='\0') {                                     c=fgetc(f);                                     if (feof(f)) break;//                                     if (c=='\x1f') {                                         c=fgetc(f);                                         if (feof(f)) break;//                                         if (c=='\x00') {                                             c=fgetc(f);                                             if (feof(f)) break;//                                             if (c=='\x08') {                                                 offset=ftell(f);                                                 offset=offset-3;                                                 fseek(f,offset,SEEK_SET);                                                 if (3!=fwrite(patch,1,3,f)) {                                                     fclose(f);                                                     printf("----------%s VxPached fwrite error!",argv[1]);                                                     getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);                                                 } else {                                                     fclose(f);                                                     printf("OK.");                                                 }                                                 return;                                             } else break;//                                         } else break;//                                     } else if (c=='\x1b') {                                         fclose(f);                                         printf("%s is VxPatched. Please type vlc.err!",argv[1]);                                         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);                                         return;                                     } else break;//                                 }                             }                         }                     }                 }             }         }     }     fclose(f);     printf("----------%s is not a unVxPached .vx file!",argv[1]);     getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0); }  看不懂啊。。前面那部分看不懂。不知道要怎么改

user: user-2
content: 仅供参考：#include <stdio.h> #include <conio.h> #include <windows.h> #include <wincon.h> FILE *f; char c; long offset; char patch[3]="\x1b\x6d";//\x00 default void main(int argc,char **argv)//".vs\0\x31\0\0\x1f\x00\x08"->".vs\0\x31\0\0\x1b\x6d\x00" {     if (argc!=2) {         printf("VxPatch filename.vx");         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);         return;     }     if (NULL==(f=fopen(argv[1],"r+b"))) {         printf("----------Can not find %s!",argv[1]);         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);         return;     }     while (1) {         c=fgetc(f);         if (feof(f)) break;//         if (c=='.') {             c=fgetc(f);             if (feof(f)) break;//             if (c=='v') {                 c=fgetc(f);                 if (feof(f)) break;//                 if (c=='s') {                     c=fgetc(f);                     if (feof(f)) break;//                     if (c=='\0') {                         c=fgetc(f);                         if (feof(f)) break;//                         if (c=='\x31') {                             c=fgetc(f);                             if (feof(f)) break;//                             if (c=='\0') {                                 c=fgetc(f);                                 if (feof(f)) break;//                                 if (c=='\0') {                                     c=fgetc(f);                                     if (feof(f)) break;//                                     if (c=='\x1f') {                                         c=fgetc(f);                                         if (feof(f)) break;//                                         if (c=='\x00') {                                             c=fgetc(f);                                             if (feof(f)) break;//                                             if (c=='\x08') {                                                 offset=ftell(f);                                                 offset=offset-3;                                                 fseek(f,offset,SEEK_SET);                                                 if (3!=fwrite(patch,1,3,f)) {                                                     fclose(f);                                                     printf("----------%s VxPached fwrite error!",argv[1]);                                                     getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);                                                 } else {                                                     fclose(f);                                                     printf("OK.");                                                 }                                                 return;                                             } else break;//                                         } else break;//                                     } else if (c=='\x1b') {                                         fclose(f);                                         printf("%s is VxPatched. Please type vlc.err!",argv[1]);                                         getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0);                                         return;                                     } else break;//                                 }                             }                         }                     }                 }             }         }     }     fclose(f);     printf("----------%s is not a unVxPached .vx file!",argv[1]);     getch();GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,0); }