【问题标题】:C Language: Search text file for a "var" and store the next string as the valueC 语言:在文本文件中搜索“var”并将下一个字符串存储为值
【发布时间】:2019-05-13 16:33:33
【问题描述】:

我怎样才能完成以下任务:

file = fopen("filename","r");
search_word_int( "var1" , file , 1 );
search_word_int( "var2" , file , 1 );
...
fclose(file);

我用过:

int search_word_int( char *word , FILE *file , int *step )
{
    char dummy[256];
    int variable = 0, step_ = step;
    while( (fgets( dummy , 256 , file )) != NULL )
    {
        if( strcmp( dummy , word ) != 0 )
        {
            for (int i = 0 ; i < step_ + 1 ; i++)
                fscanf( file , "%d" , &variable );
            printf("%s is found = %d\n",word,variable);
            return(variable);
        }
    }
}

作为搜索功能,但fgets似乎不是从文件开头搜索,而是在最后一次调用后继续获取下一行!

【问题讨论】:

    标签: c string search scanf fgets


    【解决方案1】:

    每个 FILE 都有一个文件位置或偏移量,当您执行 fgets() 时,该位置会向前移动。如果您希望从文件的开头读取,请在 search_word_int() 函数的开头插入以下行以将文件偏移量移动到文件的开头:

    fseek(file, 0, SEEK_SET);
    

    【讨论】:

    • 我按照你的回答做了,但返回值不正确。我看到每次搜索变量时只返回第二行(这是第一个变量的值)!如果文本文件是“var1 10 var2 3 var3 7”,那么我每次搜索 var1、var2 和 var3 时只取 10 个!
    • 我认为比较功能(strcmp)不能正常工作!有什么想法吗?
    • strcmp 工作正常,当您正确解释它的返回时。 programiz.com/c-programming/library-function/string.h/strcmp
    • 这里出了问题的是代码的逻辑。如果比较的两个字符串长度不同,则 strcmp() 返回非负值。所以 if 语句将永远被执行!您想要的是将 dummy 的大小设置为 strlen(word) 并将条件设置为 strcmp(dummy,word) == 0
    • 好的,我设置了 strcmp(dummy,word) == 0,但是我如何设置 dummy 的大小,你能给出示例代码吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2010-12-10
    • 2017-07-07
    • 1970-01-01
    • 2016-08-02
    • 2021-02-01
    相关资源
    最近更新 更多