我可以同时使用 scanf 和 getchar 来读取文件吗?

标签 c scanf text-files stdin getchar

我正在尝试读取一个文本文件。该文件分为三个部分。第一行总是初始化一 block 土地的大小,接下来的行到 '&' 应用土地的特征,然后最后几行描述通过土地的运动。

示例输入:

4x4
(0,0)
(3,3)
&
(0,0)>(0,1)>
(0,2)>(0,3)

到目前为止,我已经根据需要存储了 4x4,但是在此之后,我该如何:

  1. 从第 2 行开始以不同方式处理这些行
  2. 在“&”处结束该过程并继续以不同方式处理最后几行

我的代码不起作用:

/* process first line */
while (c != "\n") {
    scanf("%dx%d%c", &row, &col, &c);
    printf("The land is %d high and %d wide.%c", row, col, c);
}

/* process until '&' is found */
while (c = getchar() != '&') {
    printf("c=%c\n", c);
}

/* process rest of file */
while (c = getchar() != EOF) {
    /* do something else */
}

最佳答案

您有几个问题。

首先,字符常量用单引号表示,如下所示:

while (c != '\n')

其次,除了在格式字符串中使用 x,您可以使用 %*c 吃掉所有字符,如下所示:

scanf("%d%*c%d%c", &row, &col, &c);

您还应该在此处添加额外的括号以正确检查不等式,如下所示:

while ((c = getchar()) != '&')

这里也一样:

while ((c = getchar()) != EOF)

关于我可以同时使用 scanf 和 getchar 来读取文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176620/

相关文章:

c - 在c中实现调度算法的建议

c - "struct hack"是技术上未定义的行为吗?

c - 为什么我的程序接受的整数太多而输入的整数太少?

c - fscanf 和 fprintf 在 C 中缓冲吗?

c++ - 如何从 .t​​xt 文件中读取以确定二维数组的大小?

php - php-cpp 是否适用于 C 库?

c - 为什么 scanf() 会导致此代码中的无限循环?

c - 在 ANSI C 中计算文本文件中的行数和单词数的最快方法是什么?

java - "EOF"字符的十六进制代码在哪里?

c - C 中包含指针的段错误(核心转储)