我的输入流来自一个文本文件,其中包含由字符分隔的单词列表。
stringcompare函数是一个比较两个字符串等价性的函数,不区分大小写。
我有两个字符串数组,word[50]和dict[50]。word是用户提供的字符串。
基本上,我要做的是将word[]和文本文件中的每个单词作为stringcompare函数的参数传递。
我已经编译并运行了这段代码,但它是错误的。非常错误。我做错什么了?我能像这样使用fgetc()吗?dict[]在内部循环完成后是否会是字符串数组?

        char c, r;
        while((c = fgetc(in)) != EOF){
            while((r = fgetc(in)) != '\n'){
                dict[n] = r;
                n++;

            }
            dict[n+1] = '\0'; //is this necessary?
            stringcompare(word, dict);
        }

最佳答案

这是错误的。
fgetc()的返回值应该存储到int,而不是char,特别是当它与EOF进行比较时。
您可能忘记初始化n
您将丢失每行的第一个字符,该字符存储在c中。
使用dict[n] = '\0';而不是dict[n+1] = '\0';,因为n已在循环中递增。
可能的解决方案:

int c, r;
while((c = fgetc(in)) != EOF){
    ungetc(c, in); // push the read character back to the stream for reading by fgetc later
    n = 0;
    // add check for EOF and buffer overrun for safety
    while((r = fgetc(in)) != '\n' && r != EOF && n + 1 < sizeof(dict) / sizeof(dict[0])){
        dict[n] = r;
        n++;

    }
    dict[n] = '\0'; //this is necessary
    stringcompare(word, dict);
}

关于c - 这是fgetc的有效使用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33737988/

10-10 10:23