【问题标题】:how to read txt file by skipping character? In C如何通过跳过字符来读取txt文件?在 C 中
【发布时间】:2022-06-27 16:30:50
【问题描述】:

我正在尝试读取一个 txt 文件,获取一些信息并将其放入变量中,但我没有成功,因为我的 txt 文件的每一行都以一个字符开头,我需要跳过该字符。

输入文件:

T1, 3, 0
T2, 3, 1
T3, 2, 2

我需要忽略 T 并只取数字。我尝试在fscanf 中使用%*c,但没有成功。

int initialize()
{
    int n, n1, n2, n3, i = 0;
    FILE *fp;
    fp = fopen("input.txt", "r");
    if (fp == NULL)
    {
        printf("Error locating the file. Please try again!\n");
        exit(1);
    }
    while (fscanf(fp, "%d, %d, %d", &n1, &n2, &n3) != EOF)
    {

        p[i] = n1;

        if (p[i] > MAX)
        {
            printf("Woah! I am not a super computer. Please input upto 100 processes :)\n");
            exit(1);
        }

        b[i] = n2;

        a[i] = n3;
        i++;
    }
    fclose(fp);
    return i;
}

对不起,我来自巴西。

【问题讨论】:

  • while (fscanf(fp, "T%d,%d,%d", &n1, &n2, &n3) == 3)
  • 更好的是,首先是fgets(),然后是sscanf()(或编写您自己的解析器)...更多更好地处理验证和/或错误.
  • fscanf 中的 %*c 无法跳过 T,因为 %c 不过滤空格并且正在读取前一个换行符。它需要一个空格,如 " %*c" 来忽略换行符。

标签: c file scanf


【解决方案1】:

你把事情复杂化了。

您想读取T,因此只需在格式字符串中添加T

while (fscanf(fp, "T%d, %d, %d", &n1, &n2, &n3) != EOF)

但这不是一个好的错误检查。您应该将!= EOF 更改为== 3。阅读documentation关于返回值。

更好的方法是使用fgets 进行输入,使用sscanf 解析输入。请参阅此问题以获取更多信息:What can I use for input conversion instead of scanf?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2019-11-14
    • 2013-09-23
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多