gpt4 book ai didi

c - 如果是确定字符则跳过行

转载 作者:行者123 更新时间:2023-11-30 15:31:51 25 4
gpt4 key购买 nike

我正在尝试读取文件的第一个字符,每当它等于 '(' 我应该跳过该行,否则从该行获取第一个字符。我在 mac 下我可以使用 fgetln

FILE *file = fopen("test.txt", "r");

char c;
while(fscanf(file, "%s", &c) != EOF) {
if (c != '(')
printf("%c", c);
}

这是我当前的代码。我不知道如何跳过行,尽管我尝试获取整行并仅检查第一个字符来解决跳过问题。然而,这不起作用,我在控制台中收到奇怪的字符,而不是 test.txt 中的字符。我该怎么做?

最佳答案

使用%s的问题fscanf 的格式说明符是按空格分割,而不仅仅是行尾字符。此外,在单字符缓冲区中读取它几乎总是会产生未定义的行为。

有多种方法可以使用不同的 API 来解决此问题:

  • 您可以替换 %s%200[^\n] ,并传递 201 个字符的缓冲区而不是 c ,
  • 使用fgets使用适当大小的缓冲区,并选择初始字符,或者
  • 使用基于字符的 API,并在每次看到 '\n' 时设置“下一步”标志字符:

以下是实现第三种方法的方法:

bool takeNext = true;
int ch;
while ((ch = fgetc(file)) != EOF) {
if (takeNext && ch != '(') {
printf("%c", ch);
}
takeNext = (ch == '\n');
}

关于c - 如果是确定字符则跳过行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com