0
#include <stdio.h>
#include <string.h>

void myFgets(char str[], int n);

int main(int argc, char** argv) 
{
    if (argc < 2)
    {
        printf("Usage: csv <csv file path>\n");
        return 1;
    }
    else
    {
        char ch = ' ', search[100], dh = ' ';
        int row = 1;
        printf("Enter value to search: ");
        myFgets(search, 100);

        FILE* fileRead = fopen(argv[1], "r");

        if (fileRead == NULL)
        {
            printf("Error opening the file!\n");
            return 1;
        }

        while ((ch = (char)fgetc(fileRead)) != EOF)
        {
            char str[100];
            int i = 0, pos = ftell(fileRead);
            while ((dh = (char)fgetc(fileRead)) != ',')
            {
                str[i] = dh;
                i++;
            }
            fseek(fileRead, pos + 1, SEEK_SET);
            if (strstr("\n", str) != NULL)
            {
                row++;
            }
            if (strstr(search, str) != NULL)
            {
                printf("Value was found in row: %d\n", row);
                break;
            }
        }
    }

    getchar();
    return 0;
}

/*
Function will perform the fgets command and also remove the newline
that might be at the end of the string - a known issue with fgets.
input: the buffer to read into, the number of chars to read
*/
void myFgets(char* str, int n)
{
    fgets(str, n, stdin);
    str[strcspn(str, "\n")] = 0;
}

在第 39 行中,我遇到了一个错误,但我知道为什么我似乎做的一切都很好,我试图循环遍历行并用“,”分割它们,所以我可以检查 search == 是否为它,但它不是 wokring 我使用函数 strstr将两个字符串相互比较它工作正常,但唯一的问题是在 dh 我在 dh 之后做了 fseek 所以我不会在 ch 循环中写错地方

4

1 回答 1

1

您忘记终止字符串。

while ((dh = (char)fgetc(fileRead)) != ',')
{
    str[i] = dh;
    i++;
}
str[i] = '\0'; /* add this to terminate the string */

看起来if (strstr(search, str) != NULL)应该是if (strstr(str, search) != NULL)从文件内容中搜索要搜索的值。

于 2021-04-25T20:45:29.430 回答