Const文本中的单词数量

时间:2013-06-20 19:50:25

标签: c string

我尝试编写一个程序来计算从文件中取出的文本中的单词数。我有一个问题,编译器找不到我的文件,但我把这个文件放在项目文件夹中。 我该怎么办?

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

int words(const char sentence[ ]);

int main(void) {
    char sentence[100];
    FILE *cfPtr;

    if ( (cfPtr = fopen("C programming.dat", "r")) == NULL ) {
        printf( "File could not be opened\n" );
    }
    else {
        fscanf(cfPtr, "%s", sentence);
    }

    words(sentence);
    printf("%d", words(sentence));
    getch();
    return 0;
}

int words(const char sentence[ ]) {
    int i, length = 0, count = 0, last = 0;
    length = strlen(sentence);

    for (i = 0; i < length; i++)
        if (sentence[i] == ' ' || sentence[i] == '\t' || sentence[i] == '\n')
            count++;

    return count;
}

2 个答案:

答案 0 :(得分:0)

如果文件不在工作目录(程序所在的文件夹)中,则需要指定整个文件路径。在Linux机器上,这将类似于"/home/your-user-name/Desktop/text.txt"。对于Windows机器,它将是"c:\\your\\file\path\\text.txt"。如果文件在您的工作目录中并且程序仍然无法找到它,那么它可能不喜欢文件名中的空格。尝试命名CProgramming.dat并查看是否有效。

答案 1 :(得分:0)

我会尝试提高程序的可用性,接受文件名作为可选参数

int main(ant argc, char *argv[]) {
    char sentence[100];
    const char *filename = "C programming.dat";
    FILE *cfPtr;

    if (argc == 2)
       filename = argv[1];

    if ( (cfPtr = fopen(filename, "r")) == NULL ) {
        printf( "File '%s' could not be opened\n", filename );
    }
    else {
        int total = 0;
        while (fgets(sentence, sizeof sentence, cfPtr))
           total += words(sentence);
        printf("%d", total);
        fclose(cfPtr);
    }
    getch();
    return 0;
}
...

注意:未经测试