【问题标题】:Reading and comparing numbers from txt file C从 txt 文件 C 中读取和比较数字
【发布时间】:2011-12-08 17:44:31
【问题描述】:

我是 C 编程的新手,所以我遇到了以下问题。

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

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

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

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

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

【问题讨论】:

  • 函数fscanf 可能对你想要的很方便。 (您需要#include <stdio.h>
  • 我刚刚注意到您在这里提出了一个非常相似的问题:stackoverflow.com/questions/7785860/… 在您提出这个问题后不久。将来最好编辑您的问题,而不是开始一个新问题。

标签: c file text


【解决方案1】:

我认为您会希望在您的程序中使用这些一般步骤(但我会留给您自己弄清楚您到底想怎么做)

  1. 将每个范围和文本“FIRST”、“SECOND”等从文件 inp.txt 加载到一个数组或多个数组或类似数组中。正如我在上面的评论中所说,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 从字符串中读取到您的整数变量中。不过我没试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多