我正在尝试使用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 :(得分:5)
if (s1 == "---")
您正在以错误的方式比较字符串,您应该使用strcmp()
按照这个例子 http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1057537653&id=1043284385
答案 1 :(得分: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)
{
}
答案 2 :(得分:2)
您无法将char[]
与==
进行比较。请改用strcmp。
if( strcmp(s1, "---") == 0 )