2013-04-24 135 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)