我正在尝试从空格和制表符分隔的文本文件中读取单词和数字。我需要识别包含“Step”和“False”的行。我还需要分别存储每个单词或数字,以便稍后可以抛出一些。
我在编写代码的一部分时遇到了麻烦,该部分代码在行尾标识为“False”。我需要代码识别它已达到False并打破for循环。
注意:它的设计使您可以输入自己的路径。这部分有效。另外,我已经读过fscanf比fgets和fput更难使用,但我正在阅读的数据文件在格式上非常一致。这似乎适合我的目的,因为有些条目需要加倍。
int j;
int k;
char i[4];
char File_path[40];
char dummy;
char stuff[7] = "False"
printf("Input Path: ");
scanf("%s", &File_path);
printf("Reading: %s\n\n",File_path);
FILE *fp;
fp=fopen(File_path, "r");
for(j=0; j<7 && i != stuff; j++)
{
fscanf(fp,"%s",i);
fprintf(stdout,"Read: %s\n",i);
}
fclose(fp);
我正在阅读的文件是:
True.0 kinda false False False
返回:
Reading: c:\\Data\\1.txt
Read: True.0
Read: kinda
Read: false
Read: False
Read: False
Read: False
Read: False
我尝试将内容更改为“False”,并得到相同的结果。
答案 0 :(得分:4)
您无法比较C语言中的字符串。您需要使用strcmp()
或strncmp()
来执行此操作:
for (j = 0; j < 7 && strcmp(i, stuff); j++)
该循环条件将首次突破i
指向"False"
。您还需要使i
更大 - 您将在示例中的第一次读取时溢出该缓冲区。
编辑 - 您真的可能想要使用fgets()
和strtok()
或其中一位亲戚来处理这些事情。