我有一个简单的问题。我想用 C 编写一个程序来扫描特定文件的行,如果该行中唯一的短语是“Atoms”,我希望它停止扫描并报告它在哪一行。这是我所拥有但未编译的,因为显然我正在将整数与指针进行比较:(当然包括“string.h”。
char dm;
int test;
test = fscanf(inp,"%s", &dm);
while (test != EOF) {
if (dm=="Amit") {
printf("Found \"Atoms\" on line %d", j);
break;
}
j++;
}
文件已经被打开:
inp = fopen( .. )
并检查以确保其正确打开...
虽然我想使用不同的方法,但我想知道它是否可行。我可以这样扫描整行,而不是扫描单个字符串:
// char tt[200];
//
// fgets(tt, 200, inp);
然后做类似的事情:
if (tt[] == "Atoms") 中断;
谢谢! 阿米特
最佳答案
无需过多关注此处的实际代码,您所犯的最重要的错误是 == 运算符不会比较两个字符串。
在C语言中,字符串是一个字符数组,简单来说就是一个指针。所以 if("abcde"== some_string) 永远不会为真,除非它们指向同一个字符串!
您想使用类似“strcmp(char *a, char *b)”的方法,如果两个字符串相等则返回 0,否则返回其他值。 "strncmp(char *a, char *b, size_t n)"将比较 a 和 b 中的前 "n"个字符,如果相等则返回 0,这有利于查看字符串的开头(查看如果字符串以特定字符集开头)
你也不应该在你的 fscanf 中传递一个字符作为 %s 的指针!这将导致它完全破坏你的堆栈,它试图将许多字符放入 ch,ch 中只有一个字符的空间!正如 James 所说,您想执行类似 char ch[BUFSIZE] 的操作,其中 BUFSIZE 比您预期的单行大 1,然后执行“fscanf(inp, "%s", ch);”
希望对您有所帮助!
关于c - 循环直到找到特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810490/