2013-04-24 119 views
0

我正在尝试使用C来搜索文本文件,以查找始终位于特定位置的字符串。具体而言,我正在寻找三个连续的破折号。当它找到三条破折号时,它应该返回找到它的那一行。然后它应该继续到下一行并继续搜索三个连续的破折号,直到它到达文件的末尾。每次都应该打印行号。在文本文件中查找字符串C

这是我到目前为止有:

int main() { 
FILE *f; 
char inName[80]; 
printf("Read text from: "); 
scanf(" %79[^\n]s\n", inName); 

f = fopen(inName, "r"); 
if (f == 0) printf("ERROR: Cannot open file %s for reading.\n", inName); 
int lineNumber = 0; 

for(;;) {  
    char line[127]; 
    fgets(line, 127, f); 
    if (!feof(f)) { 
     lineNumber++; 
    } else { 
     break; 
    } 

    double lf; 
    int d, d1; 
    char s[30]; 
    char s1[4]; 

    sscanf(line, " %d, %s, %s, %s, %s, %d, %d, %lf", 
        &d, &s, &s, &s, &s, &d, &s1, &lf); 
    if (s1 == "---") { 
     printf("%d\n", lineNumber); // what line 
    } 
} 
fclose(f); 

return(0); 
} 

此代码运行,但不会显示任何信息。任何人都可以展示如何完成这项工作?谢谢:)

+0

你试过调试器吗? – 2013-04-24 19:21:05

回答

5

这不是如何在C比较字符串:

if (s1 == "---") 

正如比较s1的地址与字符串文字的地址"---"。 使用strcmp()

if (strcmp(s1, "---") == 0) 
{ 

经常检查sscanf()的返回值,以确保变量尝试使用它们之前已实际分配的值。当使用"%s"格式说明符处理,逗号字符时,不会将其作为分隔符处理,只将空格用作分隔符。为了防止,使用的消费扫描设置,类似你是如何早些时候在程序中完成(注更正sscanf()参数):

if (sscanf(line, 
      " %d, %29[^,], %29[^,], %29[^,], %29[^,], %d, %3[^,], %lf", 
      &d, s,  s,  s,  s,  &d, s1,  &lf) == 8) 
{ 
} 
+0

注意在sscanf格式字符串中也有一个错误; &s1与%d匹配时应该是%s。 – 2013-04-24 19:32:58

+0

@NigelHarper,我错过了,ta和我错过了'&s', – hmjd 2013-04-24 19:33:38

2

你不能==比较char[]。改为使用strcmp

if(strcmp(s1, "---") == 0)