首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将给定字母的单词从文件复制到新文件

将给定字母的单词从文件复制到新文件
EN

Stack Overflow用户
提问于 2022-06-06 09:41:12
回答 1查看 28关注 0票数 1

我试图将单词从一个文件复制到另一个文件,但是单词必须以给定的字母开头。这是可行的,但并不是复制所有匹配的单词。

代码语言:javascript
复制
#include <stdio.h>

int main() {
    FILE *f = fopen("words.txt", "r");
    FILE *f2 = fopen("words_copy.txt", "a+");
    char usr;
    printf("enter letter: ");
    scanf("%c", &usr);
    char buffer[255];
    char ch, ch2;
    while ((ch = fgetc(f)) != EOF) {
        ch2 = fgetc(f);
        if (ch2 == usr && ch == '\n') {
            fputc(ch2, f2);
            fgets(buffer, sizeof(buffer), f);
            fputs(buffer, f2);
        }
    }

    return 0;
}

Words.txt包含:

代码语言:javascript
复制
adorable aesthetic  alluring angelic appealing arresting attractive
blooming charismatic charming cherubic chocolate-box classy contagious
cute dazzling debonair decorative delectable delicate distinguished
enchanting enticing eye-catching glamorous glossy good-looking
gorgeous infectious lovely lush magnetic magnificent majestic melting
mesmerizing noble picturesque poetic prepossessing shimmering striking
stunning winsome

每个单词都在下一行,当我运行程序并给出字母m m时,只包含:

代码语言:javascript
复制
magnificent melting

如何用匹配的字母复制每个单词?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-06 10:47:50

循环中的测试是不正确的:检查换行符后的第一个字母,如果有匹配,则输出该行。根据这一逻辑:

usr

  • and
  • 您无法匹配文件
  • 中的第一个单词,您只匹配以

开头的单词,匹配后的单词将被忽略

此外,您的chch2应该定义为int类型,以可靠地匹配EOF,您应该测试fopen失败并在使用后关闭文件。

您应该使用更简单的方法:

如果包含letter

  • output,则
  • 读取单词
  • 测试,如果它与

匹配,则读取单词

以下是修改后的版本:

代码语言:javascript
复制
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char usr;
    char buffer[256];
    int ch = 0;
    size_t pos;

    FILE *f = fopen("words.txt", "r");
    if (f == NULL) {
        fprintf(stderr, "cannot open words.txt: %s\n", strerror(errno));
        return 1;
    }
    FILE *f2 = fopen("words_copy.txt", "a+");
    if (f2 == NULL) {
        fprintf(stderr, "cannot open words_copy.txt: %s\n", strerror(errno));
        fclose(f);
        return 1;
    }

    printf("enter letter: ");
    if (scanf(" %c", &usr) != 1) {
        fprintf(stderr, "missing input\n");
        fclose(f);
        fclose(f2);
        return 1;
    }
    while (ch != EOF) {
        pos = 0;
        /* read a word, stop at whitespace and end of file */
        while ((ch = fgetc(f)) != EOF && !isspace(ch)) {
            if (pos + 1 < sizeof(buffer))
                buffer[pos++] = (char)ch;
        }
        buffer[pos] = '\0';
        /* test for a match */
        if (strchr(buffer, usr)) {
            /* output matching word */
            fprintf(f2, "%s\n", buffer);
        }
    }
    fclose(f);
    fclose(f2);
    return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72515796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档