从C中的文本文件中读取字符串并确定行尾

时间:2012-01-13 22:53:25

标签: c string scanf printf

我正在尝试从空格和制表符分隔的文本文件中读取单词和数字。我需要识别包含“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”,并得到相同的结果。

1 个答案:

答案 0 :(得分:4)

您无法比较C语言中的字符串。您需要使用strcmp()strncmp()来执行此操作:

for (j = 0; j < 7 && strcmp(i, stuff); j++)

该循环条件将首次突破i指向"False"。您还需要使i更大 - 您将在示例中的第一次读取时溢出该缓冲区。

编辑 - 您真的可能想要使用fgets()strtok()或其中一位亲戚来处理这些事情。