繁体   English   中英

C 程序没有 output 任何东西

[英]C program doesn't output anything

该程序应该打开一个文本文件,然后在argv中搜索给定的单词。 它将逐行搜索单词,如果在该行中找到给定单词之一,程序应将其打印出来。

这是我为它写的代码:

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

int existe_mot_cle(char s[1024], int argc, char *argv[])
{
    int test = 0;
    for (int i = 2; i < argc; i++)
    {
        if (strstr(s, argv[i]))
            test = 1;
        break;
    }
    return test;
}

int open_file(char *argv[], FILE *fp)
{
    fp = fopen(argv[1], "a");
}

int main(int argc, char *argv[])

{
    FILE *fp;
    char s[1024];

    if (!open_file(argv, fp))
        return 0;

    while (fgets(s, 1024, fp))
    {
        if (existe_mot_cle(s, argc, argv))
            printf("%s", s);
    }
    fclose(fp);
}

问题是当我运行它时,什么也没有发生,我也不知道为什么。 我是 C 语言的新手。 有人可以给我解决方案并解释一下吗?

您在执行第一个if语句后立即break for循环。 你应该用花括号把它括起来:

int existe_mot_cle(char s[1024], int argc, char *argv[])
{
    int test = 0;
    for (int i = 2; i < argc; i++)
    {
        if (strstr(s, argv[i])) {
            test = 1;
            break;
        }
    }
    return test;
}

您可以使其更简单、更通用:

bool existe_mot_cle(char s[1024], size_t size, const char *ss[])
{
    for (size_t i = 0; i < size; i++) {
        if (strstr(s, ss[i]))
            return true;
    }
    return false;
}

此外,您的open_file()应该返回一个int ,但它没有返回任何东西。 最好将其从您的代码中删除,因为它毫无用处:

int main(int argc, const char *argv[])
{
    if (argc < 3) {
        printf("Usage: %s [file] [words]\n", argv[0]);
        return 0;
    }
    
    const char *filename = argv[1]; // More meaningful
    const char **otherarg = argv + 2;
    
    FILE *fp = fopen(filename, "r");
    
    if (!fp) {
        printf("Could not open %s.\n", filename);
        return 0;
    }
    
    char s[1024];
    while (fgets(s, sizeof s, fp))
    {
        if (existe_mot_cle(s, argc-2, otherarg)) // I'm using the second "simpler" version
            printf("%s", s);
    }
    
    fclose(fp);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM