在C中的文本文件中查找字符串

cod*_*ude 1 c string file

我正在尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

此代码运行但不打印任何内容.谁能说明如何完成这项工作?谢谢 :)

Tim*_*Tim 5

if (s1 == "---")
Run Code Online (Sandbox Code Playgroud)

你应该使用错误的方式比较字符串 strcmp()

请按照此示例 http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1057537653&id=1043284385


hmj*_*mjd 5

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

if (s1 == "---")
Run Code Online (Sandbox Code Playgroud)

将地址s1与字符串文字的地址进行比较"---".用途strcmp():

if (strcmp(s1, "---") == 0)
{
Run Code Online (Sandbox Code Playgroud)

始终检查返回值,sscanf()以确保在尝试使用变量之前实际为变量赋值.,使用"%s"格式说明符处理时,逗号字符不会被视为分隔符,只有空格用作分隔符.为了防止,使用扫描集,类似于您之前在程序中所做的操作(注意对sscanf()参数的更正):

if (sscanf(line,
           " %d, %29[^,], %29[^,], %29[^,], %29[^,], %d, %3[^,], %lf",
             &d, s,       s,       s,       s,       &d, s1,     &lf) == 8)
{
}
Run Code Online (Sandbox Code Playgroud)