c - 从 txt 文件 C 中读取和比较数字

标签 c file text

我是 C 编程的新手,所以我在解决下面的问题时遇到了困难。

我有一个文本文件 inp.txt,其中包含如下信息:

400;499;FIRST;
500;599;SECOND;
670;679;THIRD;

我需要输入一个数字,我的程序需要将它与 inp.txt 文件中的数字进行比较。

例如,如果我输入 450,它介于 400 和 499 之间,所以我需要将单词 FIRST 写入文件 out.txt

我不知道如何将字符数组转换为 int。

最佳答案

我认为您会希望在您的程序中包含这些一般步骤(但我会留给您来弄清楚您希望如何执行)

  1. 将文件 inp.txt 中的每个范围和文本“FIRST”、“SECOND”等加载到一个数组或多个数组或类似数组中。正如我在上面的评论中所说,fscanf 可能很方便。此页面描述了如何使用它 - 该页面是关于 C++ 的,但在 C 中使用它应该是相同的 http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/ .粗略地说,这个想法是你给 fscanf 一个格式说明符来表示你想从文件的一行中提取什么,然后它把它找到的位放入你指定的变量中)
  2. 提示用户输入一个数字。
  3. 查看数组以计算出数字适合的范围,以及输出的文本

编辑:我会按照提问者的要求提供更多细节。这仍然是一种骨架,可以给你一些想法。 使用 fopen 函数,像这样(声明一个指针 FILE* input_file):

input_file = fopen("c:\\test\\inp.txt", "r") /* "r" opens inp.txt for reading */

然后,通过检查 input_file == NULL 来检查文件是否已成功打开。

然后使用fscanf 从文件的一行中读取详细信息。遍历文件的行,直到你读完整个文件。您为 fscanf 提供指向变量的指针,您希望它将文件每一行的信息放入其中。 (这有点像相反的 printf 格式说明符)。

因此,您可以声明 int range_start, range_endchar range_name[20]。 (为简单起见,我们假设所有单词的长度最多为 20 个字符。但从长远来看,这可能不是一个好的计划)。

while (!feof(input_file)) { /* check for end-of-file */

   if(fscanf(input_file, "%d;%d;%s", &range_start, &range_end, range_name) != 3) {
      break; /* Something weird happened on this line, so let's give up */
   else {
      printf("I got the following numbers: %d, %d, %s\n", range_start, range_end, range_name);
   }
}

希望这能给您一些想法。我试过运行这段代码,它似乎确实有效。然而,值得一提的是 fscanf 有一些缺点(参见例如 http://mrx.net/c/readfunctions.html ),所以另一种方法是使用 fgets 来获取每一行(fgets 的优点是你可以指定最大数量的要读取的字符,因此没有超出字符串缓冲区长度的危险),然后 sscanf 将字符串读入整数变量。不过我还没有尝试过这种方式。

关于c - 从 txt 文件 C 中读取和比较数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784679/

相关文章:

c++ - 页面文件支持的内存映射文件与堆——有什么区别?

python - 将(例如)8 更改为 08...python

python - 如何将变量传递给 unicode/raw (ur"") 转换函数

powershell - 我缺少什么来取代我想要的一切?

c - 如何在特定位置写入文件?

c - 读取字符的更好方法是什么?

c - 函数 'sum' 的隐式声明在 C99 中无效

file - spring webflux Flux<DataBuffer> 转换为 InputStream

java - 如何使用 Java 对文本文件中的记录进行排序?

scala - Scala 是否有相当于 Python 的 difflib.SequenceMatcher 的工具